比较 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
也包含a
和b
吗?因为现在它只是空的,我不确定为什么第二个元素是特殊的。
感谢您指出这一点。 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