NSArray最有效的方法:

时间:2011-08-19 12:16:24

标签: objective-c ios cocoa-touch algorithm

假设我有一个名为arrayA -> {@"A", @"B", @"C", @"D", @"E"}的数组(NSArray)。我有另一个名为arrayB -> {@"D", @"E", @"F", @"G", @"H"}的数组(NSArray)。

对我来说最有效的方法是获得两个数组:1。一个数组是两个数组的子集,所以在这种情况下它将是{@" D",@ " E"}和arrayB中唯一的子集,所以{@" F",@" G",@" H"} 。

如果你看一下这个静脉图,这会更容易:http://theconsigliori.com/blog/wp-content/uploads/2009/09/venn-diagram.jpg

A和B是数组,我想得到2个数组,1. A&B 2. B-(A&B).

我正在使用objective-c / cocoa-touch,但欢迎任何一般的想法。该阵列将长约6000个元素,我在iPad上这样做。

谢谢!

2 个答案:

答案 0 :(得分:10)

两个数组的交集:

NSMutableSet *intersectionDict = [NSMutableSet setWithArray:arrayA];
[intersectionDict intersectSet:[NSSet setWithArray:arrayB]];
NSArray *intersectionArray = [intersectionDict allObjects];

arrayB中不存在于arrayA中的对象的子集:

NSMutableArray *arrayC = [NSMutableArray arrayWithArray:arrayB];
[arrayC removeObjectsInArray:arrayA];

答案 1 :(得分:0)

方法intersectSet,如本文所述:

NSArray - check if objects are in an array? 以Apple效率的方式解决您的问题。应该够了吗?