比较两个 NSArray 并返回差异数

Posted

技术标签:

【中文标题】比较两个 NSArray 并返回差异数【英文标题】:Compare two NSArrays and return number of differences 【发布时间】:2010-05-30 16:02:19 【问题描述】:

如何取两个NSArray,比较,然后返回差异个数,最好是不同对象的个数,例如:

数组 1: 一 二 三

数组 2: 二 四 一个

我希望它返回“1”

【问题讨论】:

为什么是一个而不是两个? 因为有一个元素是不同的。 1 有“三”,2 有“四” 【参考方案1】:

您可以通过使用中间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];

这样,只会删除常见的元素。

【讨论】:

完美运行!非常感谢! 如果数组中有相对较大的 # 项,这可能会很慢。也许。测量它。如果是,请考虑改用NSSet【参考方案2】:

我发现上面的答案没有考虑不同大小的数组。如果你按照上面的方法做,你应该检查哪个 array.count 更小,并且

[largerArray removeObjectsInArray:shorterArray];

我将它们都做成了 NSSet,然后进行了比较。

[set1 isEqualToSet:set2];

这样尺寸和顺序都得到妥善处理! (我不需要知道差异的数量)

【讨论】:

以上是关于比较两个 NSArray 并返回差异数的主要内容,如果未能解决你的问题,请参考以下文章

Lodash / javascript:比较两个集合并返回差异[重复]

比较两个数据帧并根据第一个df返回差异[重复]

比较两个 API 调用的结果并在 MEAN 应用程序中返回它们的差异

比较两个 NSArray 并检测更改的最佳方法是啥

NSPredicate的使用

在 for 循环中添加到 NSArray 会导致重复?