iOS 在一个数组中搜索,按另一个数组的索引匹配
Posted
技术标签:
【中文标题】iOS 在一个数组中搜索,按另一个数组的索引匹配【英文标题】:iOS Search in one Array, match by Index from another 【发布时间】:2014-12-04 11:43:05 【问题描述】:我有两个数组:
NSMutableArray *moviesArray;
NSMutableArray *directorsArray;
moviesArray = [@"movie01",@"movie02",@"movie03",@"movie04"];
directorsArray = [@"director01",@"director02",@"director03",@"director04"];
我在表格视图中显示这个。每个单元格都有一个标题标签和一个导演标签。
cell.titleLabel.text = [moviesArray objectAtIndex:indexPath.row];
cell.directorLabel.text = [directorsarray objectatIndex:indexPath.row];
我正在使用搜索栏搜索电影标题,所以我这样做了:
//Search Filter Code
- (void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope
NSPredicate *resultPredicate = [NSPredicate predicateWithFormat:@"SELF contains[c] %@", searchText];
searchResults = [moviesArray filteredArrayUsingPredicate:resultPredicate];
NSLog(@"Search Results: %@", searchResults);
-(BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString
[self filterContentForSearchText:searchString
scope:[[self.searchDisplayController.searchBar scopeButtonTitles]
objectAtIndex:[self.searchDisplayController.searchBar
selectedScopeButtonIndex]]];
return YES;
然后在我的牢房里:
if (tableView == self.searchDisplayController.searchResultsTableView)
cell.pdmTitle.text = [searchResults objectAtIndex:indexPath.row];
[...]
所有这些都有效。我的问题是,每部电影,在 directorsArray 中都有一个对应的 Director。 如何在我的单元格中显示匹配的导演?
意思是,如果我搜索电影 03,titleLabel.text 应该是 movie03,directorLabel.text 应该是 director03。
非常感谢您的帮助!
【问题讨论】:
我不会针对您的情况推荐这种方法。您应该选择一个自定义模型类,您可以在其中有两个属性来存储电影名称和导演名称。然后在搜索过程中,您可以使用电影名称进行过滤,并可以直接从同一模型对象中填充导演名称,而无需担心另一个数组中的正确索引。 我知道,但是我只是想更多地了解数组和某些情况下的不同方法。事实上,自定义模型类将是最好的选择。非常感谢你,甘道夫。 【参考方案1】:您是否考虑过使用单个NSDictionary
而不是使用两个NSArrays
?
例如:
NSDictionary *movies=@@"movie1":@"director1",@"movie2":@"director2";
这样你就可以通过简单地了解电影导演:
[movies objectForKey:@"movie1"];
如果您想存储有关每部电影的更多信息,那么最好的方法是使用 array
或 dictionaries
,例如:
NSDictionary *movie=@@"MovieName":@"Norbit",@"Director":@"Eddie Murphy",@"Language":@"English";
NSArray *movies=@[movie];
【讨论】:
是的,我考虑过字典,但如果我以后想添加另一个字段,例如演员,字典不是最佳选择。 您绝对可以将一组演员添加到“电影”字典中。但是,是的,最好的选择是使用自定义模型类。【参考方案2】:NSString *correspondingDirector = [directorsArray objectAtIndex: [moviesArray indexOfObject:@"Movie you are searching"]];
【讨论】:
在这种情况下,indexOfObject 正是我正在寻找的解决方案。非常感谢,帮了大忙!【参考方案3】:根据您的代码添加:
if (tableView == self.searchDisplayController.searchResultsTableView)
cell.pdmTitle.text = [searchResults objectAtIndex:indexPath.row];
// line to add:
NSString *director = [directorsArray objectAtIndex:[moviesArray indexOfObject:cell.pdmTitle.text]];
[...]
【讨论】:
以上是关于iOS 在一个数组中搜索,按另一个数组的索引匹配的主要内容,如果未能解决你的问题,请参考以下文章