我正在开发一个应用程序来检查数组是否包含某个字符串。但是,它似乎没有正常工作,因为我认为它可能正在查看字符串的情况。 在这行代码中,我如何确保containsObject:不区分大小写?
if ([myArray containsObject:term]) {...}
请询问您是否需要澄清,并感谢您的帮助。
(另外,我发现了这个问题:Case insensitive comparison NSString。我不知道这是否是我需要的,如果是,我将如何使用它?
答案 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 ) {
//...
}
这个可能对你有用......一切都是最好的