Поиск через NSArray для строки - PullRequest
19 голосов
/ 06 декабря 2009

Я хотел бы найти в моем NSArray определенную строку.

Пример:

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

Я хочу найти слово «другой» и поместить результаты в один массив, а другой, не содержащий результатов, - в другой массив, который можно отфильтровать далее.

Ответы [ 3 ]

47 голосов
/ 06 декабря 2009

Если известно, что строки внутри массива различны, вы можете использовать наборы. 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];
37 голосов
/ 06 декабря 2009

Не проверено, поэтому может иметь синтаксическую ошибку, но вы поймете, что.

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];
}
1 голос
/ 21 февраля 2012

Это не будет работать, потому что согласно документу "indexOfObjectIdenticalTo:" возвращает индекс первого объекта, который имеет тот же адрес памяти, что и объект, который вы передаете.

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

...