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"];

如果您想存储有关每部电影的更多信息,那么最好的方法是使用 arraydictionaries,例如:

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 在一个数组中搜索,按另一个数组的索引匹配的主要内容,如果未能解决你的问题,请参考以下文章

Excel - 需要从数组中搜索列表单元格的子字符串,无法获得索引/匹配工作吗?

按另一个数组排序数组?

使用 PHP 按另一个数组中的值过滤数组

对象数组按另一个数组值过滤

PHP按另一个数组中的特定键对数组进行排序[重复]

如何在JS数组的顶部索引处过滤匹配的元素