Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Case insensitive indexOfObject for NSArray

Is there an easy way to do a case insensitive lookup in an NSArray of NSStrings? Reference for NSArray mentions sorting case insensitively but nothing about lookup.

I can easily write my own fn to do it but would like to know if there's an easier way.

like image 294
Brad Robinson Avatar asked Feb 21 '26 23:02

Brad Robinson


1 Answers

I don't know of any built-in way to do this. However, it would be trivial to write a category on NSArray which does this:

@interface NSArray (CaseInsensitiveIndexing)
- (NSUInteger)indexOfCaseInsensitiveString:(NSString *)aString;
@end

@implementation NSArray (CaseInsensitiveIndexing)

- (NSUInteger)indexOfCaseInsensitiveString:(NSString *)aString {
    NSUInteger index = 0;
    for (NSString *object in self) {
        if ([object caseInsensitiveCompare:aString] == NSOrderedSame) {
            return index;
        }
        index++;
    }
    return NSNotFound;
}   

@end

Of course, you'd probably want to do a bit of type checking to make sure the array's items actually are NSStrings before you call -caseInsensitiveCompare:, but you get the idea.

like image 119
Matt Ball Avatar answered Feb 23 '26 13:02

Matt Ball