Поиск в массиве без учета регистра - PullRequest
1 голос
/ 12 апреля 2011

Я пытаюсь найти в NSMutableArray строку. Я использую containsObject: в настоящее время, но похоже, что это с учетом регистра. Мне нужно найти все комбинации данной строки (поездки). Любые идеи будут с благодарностью.

if ([self.theArray containsObject:trip]) {

}

Ответы [ 3 ]

10 голосов
/ 12 апреля 2011

Не так сложно:

BOOL found = NO;
for (NSString* str in self.theArray) {
   if ([str caseInsensitiveCompare:trip] == NSOrderedSame) {
       found = YES;
       break;
   }
}
3 голосов
/ 12 апреля 2011

Создайте категорию для NSArray и добавьте туда эту функцию.

- (BOOL)containsStringCaseInsensitive:(NSString *)key {
    key = [key lowercaseString];
    for (int i = ([self count] - 1); i >= 0; i--) {
        NSObject * obj = [self objectAtIndex:i];
        if ([obj isKindOfClass:[NSString class]]) {
            NSString * strInArray = [(NSString *)obj lowercaseString];
            if ([key isEqualToString:strInArray]) {
                return YES;
            }
        }
    }

    return NO;
}
0 голосов
/ 12 апреля 2011

Как насчет блока:

__block trip = @"blah";
if (NSNotFound!=[self.theArray indexOfObjectPassingTest:^(id obj, NSUInteger idx, BOOL *stop)
         {
             if (NSOrderedSame==[(NSString *)obj caseInsensitiveCompare:trip])
             {
                    stop=YES;
                    return YES;
             }
             return NO;
          }])
 {
       NSLog(@"It's a MATCH!");
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...