比较 NSMutableArray 元素的值

Posted

技术标签:

【中文标题】比较 NSMutableArray 元素的值【英文标题】:Comparing NSMutableArray Elements for Values 【发布时间】:2011-06-14 16:22:02 【问题描述】:

我正在寻找一种方法来比较两个 NSMutableArray 对象的内容。两个数组都填充了 NSMutableDictionaries,它们分别分配但偶尔包含相同的数据。

简化示例:

NSMutableArray *firstArray = [[NSMutableArray alloc] init];
NSMutableArray *secondArray = [[NSMutableArray alloc] init];

NSMutableDictionary *a = [[NSDictionary alloc] init];
[a setObject:@"foo" forKey:"name"];
[a setObject:[NSNumber numberWithInt:1] forKey:"number"];

NSMutableDictionary *b = [[NSDictionary alloc] init];
[b setObject:@"bar" forKey:"name"];
[b setObject:[NSNumber numberWithInt:2] forKey:"number"];

NSMutableDictionary *c = [[NSDictionary alloc] init];
[c setObject:@"foo" forKey:"name"];
[c setObject:[NSNumber numberWithInt:1] forKey:"number"];

[firstArray addObject:a];
[firstArray addObject:b];
[secondArray addObject:c];

a、b、c 是不同的对象,但 a 和 c 的内容是匹配的。

我正在寻找的是一个比较 firstArray 和 secondArray 并且只返回 b 的函数/方法。

在伪代码中:

NSArray *difference = [self magicFunctionWithArray:firstArray andArray:secondArray];
NSLog(@"%@",difference)

=> (name="bar"; number=2)

提前谢谢你。

【问题讨论】:

您的意思是secondArray 也包含ab 吗?因为现在它只是空的,我不确定为什么第二个元素是特殊的。 感谢您指出这一点。 secondArray 是为了包含 c。修复了代码示例以反映这一点。 【参考方案1】:

这可以使用NSMutableSet 实例来实现。

NSMutableSet * firstSet = [NSMutableSet setWithArray:firstArray];
NSMutableSet * secondSet = [NSMutableSet setWithArray:firstArray];

[firstSet unionSet:[NSSet setWithArray:secondArray]];
[secondSet intersectSet:[NSSet setWithArray:secondArray]];

[firstSet minusSet:secondSet];

NSLog(@"%@", firstSet);

【讨论】:

以上是关于比较 NSMutableArray 元素的值的主要内容,如果未能解决你的问题,请参考以下文章

比较 NSMutableArray 元素以从列表中查找第二大元素

使用 NSPredicates 过滤 NSMutableArray

Instrument使用

NSmutableArray添加数据添加失败打印NULL - 没有初始化/初始化写错

NSmutableArray 的实现原理机制

谓词不敏感搜索两个字符串数组