比较两个NSArray并返回不同元素的数量。

8

如何比较两个NSArray并返回它们之间的差异数量,最好是不同对象的数量,例如:

数组1: one two three

数组2: two four one

我希望返回结果为“1”


为什么只有一个差异而不是两个? - Carl Norum
因为有一个元素不同。1有"three"而2有"four"。 - Matt S.
2个回答

23

你可以通过使用一个中间的NSMutableArray来实现此功能:

NSArray *array1 = [NSArray arrayWithObjects:@"One", @"Two", @"Three", nil];
NSArray *array2 = [NSArray arrayWithObjects:@"Two", @"Four", @"One", nil];
NSMutableArray *intermediate = [NSMutableArray arrayWithArray:array1];
[intermediate removeObjectsInArray:array2];
NSUInteger difference = [intermediate count];

通过这种方式,只有共同的元素才会被移除。


1
如果数组中有相对较多的项目,这可能会很慢。也许。测量一下。如果是这样,请考虑改用NSSet - bbum

2

我发现上面的答案没有考虑到不同大小的数组。如果您按照上述方法进行操作,应该检查哪个数组的数量更小,并

[largerArray removeObjectsInArray:shorterArray];

或者

我将它们都转换为 NSSet,然后进行比较。

[set1 isEqualToSet:set2];

那样大小和顺序都可以得到正确处理!(我不需要知道差异的数量)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接