我在NSArray中有相当多的NSManagedObjects,需要检查它们中的任何一个是否具有相同的属性值。显而易见的方法是嵌套for循环,但是由于数组中有大约1000个对象,所以需要花费很长时间才能完成所有这些循环。
for (NSManagedObject *object in array) {
for (NSManagedObject *secondObject in array {
if ([[object valueForKey:@"key"] isEqualTo:[secondObject valueForKey:@"key"]] &&
object != secondObject) {
NSLog(@"Sharing a property");
}
}
}
有更好的方法吗?如果有1000个对象占1 000 000个比较,那可能需要一些时间。
答案 0 :(得分:4)
您可以使用NSDictionary
。每个条目都来自以下一对:
key
将等于所选的NSManagedObject
属性value
将是NSArray
的{{1}}个,共享此属性的值答案 1 :(得分:3)
获取数组中对象的the list of key values,然后将其转换为set。如果集合的大小与原始数组的大小相同,则没有匹配。
如果您需要知道哪些对象匹配,请使用字典创建多重集 - 每个键都有一个对象数组作为其值。
答案 2 :(得分:2)
您可以根据该属性的值对数组进行排序。 然后单循环结束 数组足以找到共享相同属性值的对象。