我在NSArray中有相当多的NSManagedObjects,需要检查它们中是否有任何属性具有相同的值。显而易见的方式是嵌套循环,但是由于数组中大约有 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 次比较,则可能需要一些时间。
NSDictionary
.每个条目将由以下对进行:
-
key
将等于选定的NSManagedObject
属性 -
value
将是共享此属性值的NSManagedObject
s 的NSArray
获取数组中对象的键值列表,然后将其转换为集合。如果集合的大小与原始数组的大小相同,则没有匹配项。
如果您需要知道哪些对象匹配,请使用字典创建一个多集 - 每个键都有一个对象数组作为其值。
创建自己的键控集类也是一种选择。
您可以根据该属性的值对数组进行排序。然后单循环该数组足以查找共享相同属性值的对象。