如何检查另一个数组中不存在数组值
Posted
技术标签:
【中文标题】如何检查另一个数组中不存在数组值【英文标题】:How to check array value not exist in another array 【发布时间】:2013-03-08 02:40:57 【问题描述】:我有两个不同的 NSMutabelArray ArrOne 和 ArrTwo。 Letsay ArrOne = A、B、C 和 D ArrTwo = C、D、X 和 Y。所以我需要检查 ArrTwo 的值是否与 ArrOne 相同,如果它与 ArrOne 中的不同,则从 ArrTwo 中删除项目。在这种情况下,我必须从 ArrTwo 中删除 X 和 Y。请给我一个想法。
【问题讨论】:
问题出在哪里?难道你不能循环遍历 ArrTwo 然后检查每个元素是否都在 ArrOne 中,如果不是就删除它? 试试这个solution。这对我有用。 :) 【参考方案1】:NSMutableSet *set = [NSMutableSet setWithArray:arrOne];
[set intersectSet:[NSSet setWithAray:arrTwo];
return [set allObjects];
【讨论】:
+1,但您没有完全回答问题。您还需要添加[ArrTwo removeObjectsInArray:[set allObjects]];
。
这只会返回相交值。我怎么知道我应该删除哪一个。
@bobShawal,您可以在上述代码后使用[ArrTwo removeObjectsInArray:[set allObjects]];
,而不是替换。或者检查对你也有用的答案。
答案是正确的。如果他从 arrTwo 中删除集合中的值,他会得到一个数组,其中包含不在 arrOne 中的值。但这不是用户要求的。【参考方案2】:
你可以用 indexOfObjectsPassingTest 来做,像这样:
NSMutableArray *a = [@[@"A",@"B",@"C",@"D"] mutableCopy];
NSMutableArray *b = [@[@"C",@"D",@"X",@"Y"] mutableCopy];
NSIndexSet *indxs = [b indexesOfObjectsPassingTest:^BOOL(NSString *obj, NSUInteger idx, BOOL *stop)
return ![a containsObject:obj];
];
[b removeObjectsAtIndexes:indxs];
【讨论】:
【参考方案3】:我找到了一个解决方案,它有效
for (int i=0; i< arrTwo.count; i++)
if(![arrOne containsObject:[arrTwo objectAtIndex:i]])
//do action
NSLog(@"do delete %@",[arrTwo objectAtIndex:i]);
谢谢!
【讨论】:
以上是关于如何检查另一个数组中不存在数组值的主要内容,如果未能解决你的问题,请参考以下文章