ios - 如何使用谓词从一个 NSArray 中选择包含在另一个 NSArray 中的对象

标签 ios objective-c nsarray nspredicate nsindexpath

我有一个 NSArray 对象,每个对象都包含一个“键”字段

我有另一个带有嵌套NSArraysNSArray,通过不同的字段“按字段分组”对这些对象进行分组,例如显示名称(字母分组)

例如

@interface MyObject

@property (nonatomic) int key;
@property (nonatomic,strong) NSString *groupByKey;

@end


NSArray *aBounchOfObjectsInAFlatList = @[obj1,obj2,obj3....];

NSArray *groupByArrayOfObjects = @[@[obj1_tag,obj2_tag],@[objn_tag,objk_tag]....];

重要的是要注意 obj1 != obj1_tag - 它们只共享“groupByKey”和/或“key”的值。

我想从平面数组中找到每个 obj_tag 的索引,其中 (obj_tag.key == obj.key)

现在我正在运行 2 个循环并保存计数器值 - 为匹配项创建索引路径。

我认为有一种明确的方法使用 NSPredicates 为相应的对象创建 NSIndexPaths 数组,但我不清楚如何做到这一点

最佳答案

NSPredicate 只是一个谓词,仅此而已。它应用于某些对象并且 产生 YES 或 NO。谓词可用于过滤数组,但由于谓词本身应用于每个数组元素,因此它不“知道”位置 被测试对象的(或索引)。 因此,NSPredicate 无法创建 NSIndexPath 数组。

NSArray 方法 indexOfObjectPassingTest: 对于查找位置很有用 数组中的对象,但即使该方法也必须循环遍历所有数组元素 找到对象。因此,它可能有助于使代码更短或更具可读性,但是 它不会改变性能。

如果groupByArrayOfObjects非常大,那么您可以首先创建从每个键到相应索引路径的映射(NSDictionary)。这仅需要对(嵌套)数组进行一次枚举。然后你可以使用这个映射来获取 另一个数组中每个元素的索引路径aBounchOfObjectsInAFlatList

关于ios - 如何使用谓词从一个 NSArray 中选择包含在另一个 NSArray 中的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23590425/

相关文章:

ios - 将KVO添加到核心数据的类别属性

objective-c - 在模拟器中播放 - objective-c

objective-c - super 简单的程序不起作用

iOS 7 : UITabBarItem badge z-index

iphone - 如何通过数组计数对嵌套NSArray的NSArray进行排序?

ios - AFNetworking https 自签名证书

ios - 如何在 Swift 中将一个属性分配给多个变量?

objective-c - Mac系统状态栏焦点

iphone - 我如何将充满 UNIX 日期的 NSMutableArray 转换为标准日期?