从共享属性的NSArray中查找NSManagedObjects

时间:2013-10-09 20:00:52

标签: ios objective-c compare nsmanagedobject

我在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个比较,那可能需要一些时间。

3 个答案:

答案 0 :(得分:4)

您可以使用NSDictionary。每个条目都来自以下一对:

  • key将等于所选的NSManagedObject属性
  • value将是NSArray的{​​{1}}个,共享此属性的值

答案 1 :(得分:3)

获取数组中对象的the list of key values,然后将其转换为set。如果集合的大小与原始数组的大小相同,则没有匹配。

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

Creating your own keyed set class也是一种选择。

答案 2 :(得分:2)

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