如何检查另一个数组中不存在数组值

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]);
     

谢谢!

【讨论】:

以上是关于如何检查另一个数组中不存在数组值的主要内容,如果未能解决你的问题,请参考以下文章

Hive:如何检查一个数组的值是不是存在于另一个数组中?

找出另一个数组列表中不存在的数组列表的元素

Swift 3 从一个数组中删除另一个数组中不存在的对象并保持顺序

使用 lodash 检查数组是不是存在于另一个数组中

php PHP检查另一个数组中是否存在所有数组值

如何从 iOS 的另一个 nsarray 中不存在的核心数据中删除对象?