检查NSArray中对象的重复属性值

时间:2013-05-09 11:13:02

标签: objective-c cocoa-touch cocoa search nsarray

我有NSArray个包含size属性的对象。

如何检查NSArray是否有两个size具有相同值的对象?

我可以这样做:

int i = 0;
for (id item1 in myArray) {
    NSDecimalNumber *size1 = [item1 size];

    for (id item2 in myArray) {
        NSDecimalNumber *size2 = [item2 size];

        if ([size1 isEqual:size2]) {
            i ++;
        }
    }
}

if (i > [myArray count]) {
    NSLog(@"Duplicate Sizes Exist");
}

或者有更简单的方法吗?

4 个答案:

答案 0 :(得分:3)

试试这段代码:

NSSet *myset = [NSSet setWithArray:[myarray valueForKey:@"size"]];
int duplicatesCount = [myarray count] - [myset count];

size这里是对象属性。

答案 1 :(得分:1)

使用NSCountedSet。然后将所有对象添加到计数集中,并使用countForObject:方法查找每个对象在数组中出现的频率。

您也可以查看此链接how-to-find-duplicate-values-in-arrays

希望它可以帮到你

答案 2 :(得分:0)

NSArray *cleanedArray = [[NSSet setWithArray:yourArraywithDuplicatesObjects ] allObjects];

使用集合将删除所有重复对象。将返回NSArray NSCountedSet并使用countForObject:方法查找每个对象出现多少次。

答案 3 :(得分:0)

可能最简单的方法是根据大小字段对数组进行排序,然后逐步查看排序列表,查找相邻的dupes。

您还可以将每个对象“包装”在一个导出大小作为其键并使用集合的对象中。但这是很多额外的分配。

但是如果您只想知道是否存在dupes,而不是它们是哪个,请为每个对象的大小创建一个NSNumber并将NSNumber插入一个集合中。最终尺寸将告诉你有多少傻瓜。