多个NSArray和常见对象

时间:2011-04-09 23:47:18

标签: objective-c nsarray

所以我有多个NSArrays(实际上是5个),我想创建一个新的NSArray,它只包含所有数组共有的对象。有没有一种有效的方法来做到这一点。我能想到的唯一方法是循环遍历比较每个对象的所有数组。

2 个答案:

答案 0 :(得分:3)

为什么不创建一个NSSet(真的是NSMutableSet),将所有5个数组的内容转储到它中,然后从NSSet构造一个新的NSArray?

抱歉,我最初误读了你的问题。是的,我认为你几乎必须遍历每一个才能找到重复项。但实现起来并不是那么糟糕(如果你的数组很大,那么在运行时可能会有点慢)。

以下是一些示例代码:

- (void) filterSet: (NSMutableSet*)set withArray: (NSArray*) array {
    NSMutableSet* removals = [NSMutableSet setWithCapacity:[array count]];
    for (id obj in set) {
        if (! [array containsObject: obj]) {
            [removals addObject: obj];
        }
    }
    [set minusSet: removals];
}

NSMutableSet* mySet = [NSMutableSet setWithCapacity:[array1 count] * 5];
[mySet addObjectsFromArray: array1];
[self filterSet: mySet withArray: array2];
[self filterSet: mySet withArray: array3];
[self filterSet: mySet withArray: array4];
[self filterSet: mySet withArray: array5];

NSArray* filteredArray = [mySet allObjects];

答案 1 :(得分:3)

我最终使用了这个很好用的:

NSMutableSet *set = [NSMutableSet setWithArray:array];
NSMutableSet *set1 = [NSMutableSet setWithArray:array2];
NSMutableSet *set2 = [NSMutableSet setWithArray:array3];
NSMutableSet *set3 = [NSMutableSet setWithArray:array4];
NSMutableSet *set4 = [NSMutableSet setWithArray:array5];

[set intersectSet:set1];
[set intersectSet:set2];
[set intersectSet:set3];
[set intersectSet:set4];

NSArray *allArray = [set allObjects];