【问题标题】: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。这对我有用。 :)

标签: ios ipad cocoa-touch nsmutablearray


【解决方案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]);
         }
    }
    

    谢谢!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-21
      • 2012-12-02
      • 2015-09-19
      • 2020-08-23
      相关资源
      最近更新 更多