Подтвердить что ты не робот

Поиск по NSArray для строки

Я хотел бы выполнить поиск через NSArray для определенной строки.

Пример:

NSArray имеет объекты: "собака", "кошка", "толстая собака", "вещь", "другая вещь", "черт возьми другое дело"

Я хочу найти слово "другое" и поместить результаты в один массив, а другой, без результатов, в другой массив, который можно отфильтровать дальше.

4b9b3361

Ответ 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:" возвращается индекс первого объекта, который имеет тот же адрес памяти, что и объект, который вы проходите.

вам нужно пройти через ваш массив и сравнить.