【发布时间】:2015-04-02 17:03:44
【问题描述】:
我有两个键值对数组。这两个数组都包含不同的键值对。我想根据特定键查找第一个数组中不属于第二个数组的元素。
例子:
第一个数组 - [{id=1, name="foo"}, {id=2, name="bar"}]
第二个数组 - [{id=2, name="abc"}, {id=1, name="xyz"}]
有什么方法可以实现吗? 现在我像这样枚举两个数组:
for (NSDictionary *eachPlayer in 1stArray) {
for (NSDictionary *eachPrediction in 2ndArray) {
if (eachPrediction[kId] != eachPlayer[kId]) {
[self.predictPlayerArray addObject:eachPlayer];
}
}
}
但这在上述情况下失败,并将两个值都添加到predictionPlayerArray - 在第一次迭代中它添加 1,在第四次迭代中它添加 2。我如何防止这种情况发生?
谢谢。
编辑
我好像是这样解决的。不是最好的解决方案,但它似乎有效:
for (NSDictionary *eachPlayer in arrayOne) {
for (NSDictionary *eachPrediction in arrayTwo) {
if (eachPrediction[kId] == eachPlayer[kId]) {
if ([self.predictPlayerArray containsObject:eachPlayer]) {
[self.predictPlayerArray removeObject:eachPlayer];
}
break;
}
else {
[self.predictPlayerArray addObject:eachPlayer];
}
self.predictPlayerArray = [self.predictPlayerArray valueForKeyPath:@"@distinctUnionOfObjects.self"];
}
}
【问题讨论】:
-
你能告诉我们你想在结果数组中完成什么吗?每个数组的值都不同。如果您想检查是否存在密钥,则方法略有不同
-
在这种情况下,结果数组应该为零。现在如果第一个数组还有一个条目,比如 [3 :"abc"],结果将是 [3 :"abc"]
-
A
NSPredicate并且可能正在寻找@unionOfArarys或者可能不在 (stackoverflow.com/questions/8580715/…),因为不清楚您真正想要什么。 -
@Anil 你说“我想根据特定键在第一个数组中查找不属于第二个数组的元素”,但希望结果数组为零,即使没有第一个数组中的元素是第二个数组的一部分......我同意目前还不清楚你想要什么......
-
@LyndseyScott 我已经对示例进行了编辑。
标签: ios objective-c iphone