从共享属性的 NSArray 中查找 NSManagedObjects



我在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

获取数组中对象的键值列表,然后将其转换为集合。如果集合的大小与原始数组的大小相同,则没有匹配项。

如果您需要知道哪些对象匹配,请使用字典创建一个多集 - 每个键都有一个对象数组作为其值。

创建自己的键控集类也是一种选择。

您可以根据该属性的值对数组进行排序。然后单循环该数组足以查找共享相同属性值的对象。

最新更新