NSArray中的case insensitivity containsObject:

the*_*kmc 17 cocoa objective-c case-sensitive ios

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

if ([myArray containsObject:term]) {...}
Run Code Online (Sandbox Code Playgroud)

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

(另外,我发现了这个问题:不区分大小写的比较NSString.我不知道这是否是我需要的,如果是,我将如何使用它)

Lil*_*ard 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
}
Run Code Online (Sandbox Code Playgroud)


Chr*_*ner 17

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

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

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")
}
Run Code Online (Sandbox Code Playgroud)


小智 7

NSArray是(故意)不知道它拥有什么.因此,它没有意识到NSString,更不用说区分大小写了.你必须循环遍历数组的项目并进行比较.您可以使用循环数组的多种不同方法之一:

  • objectEnumerator
  • indexOfObjectPassingTest: 它使用块来执行您的操作.
  • 呼吁objectAtIndex:每个项目.

我会建议前两个选项之一.