Objective-C - 如何比较数组并提取差异?

mar*_*one 24 arrays objective-c

可能重复:比较两个数组

我有两个NSArray,我想用第二个数组中的对象创建一个新的数组但不包含在第一个数组中.

Example:

NSMutableArray *firstArray = [NSMutableArray arrayWithObjects:@"Bill", @"Ben", @"Chris", @"Melissa", nil];
NSMutableArray *secondArray = [NSMutableArray arrayWithObjects:@"Bill", @"Paul", nil];

The resulting array should be: 

[@"Paul", nil];
Run Code Online (Sandbox Code Playgroud)

我通过双循环将对象与内部对象进行比较来解决这个问题.

有更好的解决方案吗?

Jea*_*ser 100

[secondArray removeObjectsInArray:firstArray];
Run Code Online (Sandbox Code Playgroud)

这个想法取自另一个答案.


tea*_*bot 10

如果重复的项目是不是在阵列显著,你可以使用minusSet:的操作 NSMutableSet:

NSMutableArray *firstArray = [NSMutableArray arrayWithObjects:@"Bill", @"Ben", @"Chris", @"Melissa", nil];
NSMutableArray *secondArray = [NSMutableArray arrayWithObjects:@"Bill", @"Paul", nil];

NSSet *firstSet = [NSSet setWithArray:firstArray];
NSMutableSet *secondSet = [NSMutableSet setWithCapacity:[secondArray count]];
[secondSet addObjectsFromArray:secondArray];

[secondSet minusSet:firstSet]; // result is in `secondSet`
Run Code Online (Sandbox Code Playgroud)

  • 这是不可能的.Apple的文档称minusSet是无效类型. (2认同)
  • 最后一个语句的正确代码只是"[secondSet minusSet:firstSet];" 执行减法.结果未返回,而是对secondSet对象的操作.如果这是在子程序中,那么你将"返回secondSet;" (2认同)