【发布时间】:2015-06-26 12:04:57
【问题描述】:
我有 3 个大小相同的 NSMutableArrays。它们是“链接的”,这意味着对于相应的索引,它们具有彼此相关的内容。
tableData = [NSMutableArray arrayWithObjects:@"Egg Benedict", @"Mushroom Risotto", @"Full Breakfast", nil]
thumbnails = [NSMutableArray arrayWithObjects:@"egg_benedict.jpg", @"mushroom_risotto.jpg", @"full_breakfast.jpg",nil]
prepTime = [NSMutableArray arrayWithObjects:@"10min", @"15min", @"8min",nil]
这来自我正在玩的教程。
我正在像这样过滤 tableData 数组:
NSPredicate *resultPredicate = [NSPredicate
predicateWithFormat:@"SELF contains[cd] %@",
searchText];
searchResultsData = [[tableData filteredArrayUsingPredicate:resultPredicate] mutableCopy];
其中searchText 是包含过滤器的字符串(例如“egg”)。
这很好用,我的意思是我有正确的过滤。 (searchResultsData 是另一个 NSMutableArray)
我需要做的是根据上面NSPredicate 得到的结果过滤另外两个NSMutableArrays。
所以我创建了另外两个NSMutableArrays,分别称为“searchResultThumbnails”和“searchResultPrepTime”。
我期待这个:如果我使用单词“egg”进行过滤,我想要“tableData”数组中包含“egg”的第一个元素(在这种情况下只有一个元素)以及缩略图中索引处的对应元素和preptime 数组。
所以用“鸡蛋”过滤后的结果应该是:
searchResultData = "Egg"
searchResultThumbnails = "egg_benedict.jpg"
searchResultPrepTime = "10min"
感谢您的帮助。
【问题讨论】:
-
考虑使用一个字典数组,或者——更好的是——具有适当属性的自定义类对象
-
并行数组是面向对象编程之前的遗留物。那时它们很容易出错,现在也没有更好的方法。 (如果您绝对必须这样做,请获取
searchResultsData中的每个项目,在tableData中找到它的索引,然后使用这些索引在其他主数组中查找对象以填充您的搜索数组...但这仍然是个坏主意。:) ) -
支持@stklieme cmets,您的字典数组可能类似于 ( { searchResultData = "Egg" searchResultThumbnails = "egg_benedict.jpg" searchResultPrepTime = "10min"} .......... ............. { } )
标签: ios objective-c xcode nsmutablearray filtering