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