1

我有一个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

4 回答 4

3

试试这个代码:

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

size这是对象属性。

于 2013-05-09T11:59:50.560 回答
1

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

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

希望对你有帮助

于 2013-05-09T11:18:31.010 回答
0
NSArray *cleanedArray = [[NSSet setWithArray:yourArraywithDuplicatesObjects ] allObjects];

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

于 2013-05-09T11:20:18.460 回答
0

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

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

但是,如果您只想知道是否存在欺骗,而不是它们是哪些,请为每个对象的大小创建一个 NSNumber 并将 NSNumber 插入一组中。最终大小会告诉你有多少个骗子。

于 2013-05-09T11:24:02.747 回答