我有一个 NSArray
对象,每个对象都包含一个“键”字段
我有另一个带有嵌套NSArrays
的NSArray
,通过不同的字段“按字段分组”对这些对象进行分组,例如显示名称(字母分组)
例如
@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/