Поиск по NSArray для строки
Я хотел бы выполнить поиск через NSArray для определенной строки.
Пример:
NSArray имеет объекты: "собака", "кошка", "толстая собака", "вещь", "другая вещь", "черт возьми другое дело"
Я хочу найти слово "другое" и поместить результаты в один массив, а другой, без результатов, в другой массив, который можно отфильтровать дальше.
Ответы
Ответ 1
Не тестировалось, поэтому может возникнуть синтаксическая ошибка, но вы получите эту идею.
NSArray* inputArray = [NSArray arrayWithObjects:@"dog", @"cat", @"fat dog", @"thing", @"another thing", @"heck here 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];
}
Ответ 2
Если строки внутри массива, как известно, различны, вы можете использовать наборы. 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];
Ответ 3
Это не сработает, потому что в документе "indexOfObjectIdenticalTo:" возвращается индекс первого объекта, который имеет тот же адрес памяти, что и объект, который вы проходите.
вам нужно пройти через ваш массив и сравнить.