不区分大小写比较一堆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
。 然后你比较nil
与NSOrderSame
(这是0),你会得到一个当然是错误的匹配。
你也必须检查传递给caseInsensitiveCompare:
参数是否必须不为零。 从文档 :
这个值不能为零。 如果此值为零,则行为未定义,并可能在未来版本的OS X中更改。