不区分大小写比较一堆string

什么是最好的方法来比较一个NSString的一堆其他string不区分大小写? 如果是string之一,那么方法应该返回YES,否则返回NO。

这里有一个小帮手function:

BOOL isContainedIn(NSArray* bunchOfStrings, NSString* stringToCheck) { for (NSString* string in bunchOfStrings) { if ([string caseInsensitiveCompare:stringToCheck] == NSOrderedSame) return YES; } return NO; } 

当然这可以针对不同的使用情况进行极大的优化。

例如,如果您对一个常量bunchOfStrings进行了大量的检查,则可以使用NSSet来保存string的小写版本,并使用containsObject: ::

 BOOL isContainedIn(NSSet* bunchOfLowercaseStrings, NSString* stringToCheck) { return [bunchOfLowercaseStrings containsObject:[stringToCheck lowercaseString]]; } 

只是为了增加一些尼古拉的答案:

NSOrderedSame被定义为0

 typedef NS_ENUM(NSInteger, NSComparisonResult) {NSOrderedAscending = -1L, NSOrderedSame, NSOrderedDescending}; 

所以,如果你调用caseInsensitiveCompare:在一个nil对象,你会得到nil 。 然后你比较nilNSOrderSame (这是0),你会得到一个当然是错误的匹配。

你也必须检查传递给caseInsensitiveCompare:参数是否必须不为零。 从文档 :

这个值不能为零。 如果此值为零,则行为未定义,并可能在未来版本的OS X中更改。

Interesting Posts