【问题标题】:checking if an array doesn't contain a certain object检查数组是否不包含某个对象
【发布时间】:2011-04-02 00:29:03
【问题描述】:

是否有一个类可用于检查数组是否不包含对象? 我想做类似的事情

if [(myarray doesntContain @"object")]

这可能吗

【问题讨论】:

  • @Alx,当您为您的问题选择标签时,通常最好确保其中一个是您提出问题的语言 =)
  • 在这种情况下,哪种数组?一个基本的 C 数组,还是一个 NSArray?
  • 记得在提问时添加这些细节,我们大多数人无法读心。

标签: objective-c nsarray


【解决方案1】:

对于NSArray,请使用-containsObject:

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

【讨论】:

  • 我知道包含对象我想看看数组中是否没有特定对象以及是否没有添加一个。我知道如何添加我只是不知道如何检查一个对象是否丢失..
  • @Alx:这就是! 存在的原因,它基本上是“如果不存在(数组包含对象)”。没有特定的 -doesntContainObject: 可以轻松使用 !== NO
  • 但是我有一个小错误 if (![self.favoritesArray containsObject:@" added"]) { [self.favoritesArray addObject:@" added"]; } else if ([self.favoritesArray containsObject:@"added"]) { [self.favoritesArray removeObject:@"added"];这是我的代码,当我按下按钮时,它不会删除添加的选项...
  • @Alx:您不能使用NSArray 添加或删除对象,请使用NSMutableArray。如果您仍然有问题,您应该打开一个新问题并添加更多详细信息。另请注意,if (!...) { ... } else { ... } 就足够了(您不必测试两次),也许NSMutableSet 更适合您。
  • 我知道,我的数组是可变数组。
【解决方案2】:

我编写了一个 NSArray 类别来通过实例方法实现这些否定检查,正如您最初要求的那样。第一个是用于数组类型的对象集合组,后者用于单数检查。如果数组实例不包含传递的一个或多个对象,则这些返回 YES。为什么?感叹号让我很困惑。

NSArray+Additions.h

-(BOOL)doesNotContainObjects:(id<NSFastEnumeration>)enumerable;

-(BOOL)doesNotContainObject:(id)object;

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;
}

【讨论】:

    【解决方案3】:

    如果您正在处理 NSArray,您的第一个调用端口可能应该是 Apple documentation for NSArray,并且可能是方法 containsObjectthis question 中有一个示例。

    【讨论】:

    • 我知道包含对象我想看看数组中是否没有特定对象以及是否没有添加一个。我知道如何添加我只是不知道如何检查一个对象是否丢失..
    • 因此,正如 Georg 在他的回答中指出的那样,将呼叫转至 containsObject =)
    猜你喜欢
    • 1970-01-01
    • 2020-08-11
    • 1970-01-01
    • 1970-01-01
    • 2014-07-27
    • 2015-01-22
    • 2020-06-07
    • 2023-04-05
    • 1970-01-01
    相关资源
    最近更新 更多