NSArray中的case insensitivity containsObject:

时间:2011-11-15 22:48:24

标签: ios objective-c cocoa case-sensitive

我正在开发一个应用程序来检查数组是否包含某个字符串。但是,它似乎没有正常工作,因为我认为它可能正在查看字符串的情况。 在这行代码中,我如何确保containsObject:不区分大小写?

if ([myArray containsObject:term]) {...}

请询问您是否需要澄清,并感谢您的帮助。

(另外,我发现了这个问题:Case insensitive comparison NSString。我不知道这是否是我需要的,如果是,我将如何使用它?

5 个答案:

答案 0 :(得分:27)

if ([myArray indexOfObjectPassingTest:^(id obj, NSUInteger idx, BOOL *stop){
         return (BOOL)([obj caseInsensitiveCompare:term] == NSOrderedSame);
     }] != NSNotFound) {
    // there's at least one object that matches term case-insensitively
}

答案 1 :(得分:17)

这是一种使用键值编码的有效方法。

NSArray *strings; // array of strings
if ([[strings valueForKey:@"lowercaseString"] containsObject:[searchString lowercaseString]]) {
   NSLog(@"searchString found");
} else {
   NSLog(@"searchString NOT found");
}

Swift 3选项:

let things = ["foo", "Bar"]
let searchString = "FOO"

if things.contains(where: { $0.lowercased() == searchString.lowercased() }) {
    print("found searchString")
} else {
    print("searchString not found")
}

答案 2 :(得分:7)

NSArray(故意)无知它的含义。因此,它不知道NSString,更不了解区分大小写。你必须循环遍历数组的项目并进行比较。您可以使用多种不同方式循环遍历数组:

  • objectEnumerator
  • indexOfObjectPassingTest:使用块来执行操作。
  • 为每件商品致电objectAtIndex:

我会建议前两个选项中的一个。

答案 3 :(得分:0)

- (BOOL)containsObject:(id)anObject 

是一种方便的方法,您不能将其用于您的目的。这是文档讨论:

  

此方法确定aObject是否存在于数组中   向每个数组的对象发送一个isEqual:消息(和   将anObject作为参数传递给每个isEqual:message)。

一般的NSObject方法isEqual:方法不能考虑字符串字符的情况。如果你可以使用块(iOS 4),最好的解决方案可能就像Kevin Ballard的命题。如果没有,那么你可能必须遍历字符串。

答案 4 :(得分:-1)

if ([@"Some String" caseInsensitiveCompare:@"some string"] == NSOrderedSame ) {
    //...
}

这个可能对你有用......一切都是最好的