Вопрос

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top