检查一个数组是否不包含某个对象

34

是否有可用的类来检查数组中是否不包含某个对象?我想做类似于下面的操作:

if [(myarray doesntContain @"object")]

这可行吗?


2
@Alx,当您选择问题标签时,通常最好确保其中一个是您要提问的语言=) - Rob
1
在哪种情况下,使用哪种类型的数组?是基本的C数组还是NSArray? - Stephen
在提问时,请记得添加这些细节,因为大多数人都无法读心。 - Georg Fritzsche
3个回答

104

对于NSArray,使用-containsObject:

if (![myarray containsObject:someObject]) {
    // ...
}

我知道关于包含对象的事情,我想要看看数组中是否没有特定的对象,如果没有,就添加一个。我知道如何添加,只是不知道如何检查缺少一个对象。 - Alex Stelea
1
@Alx:这就是为什么有 !,它基本上是“如果不包含对象,则......”。没有特定的 -doesntContainObject:,因为使用 !== NO 很容易。 - Georg Fritzsche
1
然而我有一个小错误:if (![self.favoritesArray containsObject:@"added"]) { [self.favoritesArray addObject:@"added"]; }else if ([self.favoritesArray containsObject:@"added"]) { [self.favoritesArray removeObject:@"added"]; }这是我的代码,当我按下按钮时它不会删除“added”选项... - Alex Stelea
@Alx:你不能使用NSArray添加或删除对象,应该使用NSMutableArray。如果仍然有问题,你应该打开一个新的问题并添加更多细节。还要注意if(!...){...} else {...}就足够了(你不需要测试两次),而且也许NSMutableSet更适合你。 - Georg Fritzsche
我知道我的数组是可变的。 - Alex Stelea
顺便提一下:如果你的数组由你创建的自定义对象组成,你需要在它们上面实现-(BOOL)isEqual:(id)anotherObject;方法,以便-containsObject:能够正常工作。 - Glogo

1
我编写了一个NSArray类别,通过实例方法来实现这些否定检查,就像您最初请求的那样。第一个是针对一组对象的数组类型设置,后者是针对单个检查的。在这些情况下,如果数组实例不包含传递的对象或对象,则返回YES。为什么?感叹号让我困惑。

NSArray+Additions.h

-(BOOL)不包含对象:(id)object;

-(BOOL)不包含对象集合:(id<NSFastEnumeration>)enumerable;

NSArray+Additions.m

-(BOOL)doesNotContainObjects:(id<NSFastEnumeration>)enumerable {
   for (id x in enumerable) {
     if ([self containsObject:x]) return NO; // exists, abort!
   }
   return YES;   // it ain't in there, return TRUE;
}
- (BOOL)doesNotContainObject:(id)object {
  if ([self containsObject:object]) return NO; return YES;
}

0

我知道关于包含对象的事情,我想要看看数组中是否没有特定的对象,如果没有,就添加一个。我知道如何添加,只是不知道如何检查缺少一个对象。 - Alex Stelea
所以按照Georg的答案所示,反转对containsObject的调用 =) - Rob

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接