Поиск через nsarray для строки
Вопрос
Я хотел бы искать через свой NSArray для определенной строки.
Пример:
У nsarray есть объекты: «собака», «кошка», «толстая собака», «вещь», «Другая вещь», «черт возьми, вот еще одна вещь»
Я хочу искать слово «другое» и поместить результаты в один массив, а другой, не является результатом, в другой массив, который можно отфильтровать дальше.
Решение
Не тестируется, поэтому может иметь синтаксисную ошибку, но вы получите эту идею.
NSArray* inputArray = [NSArray arrayWithObjects:@"dog", @"cat", @"fat dog", @"thing", @"another thing", @"heck here's another thing", nil];
NSMutableArray* containsAnother = [NSMutableArray array];
NSMutableArray* doesntContainAnother = [NSMutableArray array];
for (NSString* item in inputArray)
{
if ([item rangeOfString:@"another"].location != NSNotFound)
[containsAnother addObject:item];
else
[doesntContainAnother addObject:item];
}
Другие советы
Если струны внутри массива, как известно, отличаются, вы можете использовать наборы. NSSet быстрее, чем NSArray на больших входах:
NSArray * inputArray = [NSMutableArray arrayWithObjects:@"one", @"two", @"one again", nil];
NSMutableSet * matches = [NSMutableSet setWithArray:inputArray];
[matches filterUsingPredicate:[NSPredicate predicateWithFormat:@"SELF contains[c] 'one'"]];
NSMutableSet * notmatches = [NSMutableSet setWithArray:inputArray];
[notmatches minusSet:matches];
Это не сработает, потому что согласно документу «IndexofobjectidentTo:» возвращает индекс первого объекта, который имеет тот же адрес памяти, что и объект, в котором вы передаете.
Вам нужно пройти через свой массив и сравнить.