测试NSMutableArray是否包含字符串对象

时间:2010-04-23 10:18:55

标签: iphone nsarray

我有一个NSMutableArray,其中包含一些NSString个对象。如何测试数组是否包含特定的字符串文字?

我尝试了[array containsObject:@"teststring"],但这不起作用。

5 个答案:

答案 0 :(得分:87)

你正在做什么应该工作正常。例如

NSArray *a = [NSArray arrayWithObjects:@"Foo", @"Bar", @"Baz", nil];
NSLog(@"At index %i", [a indexOfObject:@"Bar"]);

为我正确记录“在索引1”。两种可能的缺点:

  1. indexOfObject发送isEqual条消息进行比较 - 您是否未在某个类别中替换此方法?
  2. 确保您正在针对NSNotFound进行测试,因为找不到,而不是(比方说)0。

答案 1 :(得分:77)

[array indexOfObject:object] != NSNotFound

答案 2 :(得分:8)

与字符串文字进行比较仅适用于代码示例。在现实世界中,您经常需要与例如NSString *实例进行比较。一个数组,在这种情况下containsObject失败,因为它与对象进行比较,而不是值。

你可以在你的实现中添加一个类别,它扩展了NS(Mutable)数组,并使用一种方法来检查它是否包含字符串(或者你需要比较的任何其他类型);

@implementation NSMutableArray (ContainsString)
-(BOOL) containsString:(NSString*)string
{
  for (NSString* str in self) {
    if ([str isEqualToString:string])
      return YES;
  }
  return NO; 
}
@end

答案 3 :(得分:6)

您也可以使用谓词:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF IN %@", theArray];
BOOL result = [predicate evaluateWithObject:theString];

答案 4 :(得分:5)

每个对象

[(NSString *) [array objectAtIndex:i] isEqualToString:@"teststring"];
相关问题