0

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

4

3 回答 3

4

你可以使用一个NSDictionary. 每个条目将由以下对组成:

  • key将等于选定NSManagedObject的 s 属性
  • value将是一个NSArrayof NSManagedObjects,共享此属性的值
于 2013-10-09T20:11:15.117 回答
3

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

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

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

于 2013-10-09T20:03:39.053 回答
2

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

于 2013-10-09T20:12:26.903 回答