Как найти строку в NSArray? - PullRequest
18 голосов
/ 28 ноября 2009

Это похоже на глупый вопрос, но как мне найти строку в NSArray?

Я пытался использовать

[array indexOfObjectIdenticalTo:myString]

но для этого требуется, чтобы жало имело тот же адрес.

У кого-нибудь есть советы как это сделать?

Ответы [ 4 ]

50 голосов
/ 28 ноября 2009

Вы хотите метод indexOfObject: , который ищет объект, отправляя каждому объекту в массиве сообщение isEqual:.

13 голосов
/ 28 ноября 2009

Петр ответ правильный.

Одна дополнительная заметка; если у вас есть тонны и тонны строк в массиве, -indexOfObject: будет выполнять линейный поиск. Это может оказаться узким местом в производительности, для которого вам следует рассмотреть возможность использования другого контейнера; NSSet или NSDictionary, возможно (в зависимости от того, что означают строки).

Еще одна проблема: все строки относительно похожи и / или относительно длинные.

Конечно, ничего не оптимизируйте, пока не воспользуетесь инструментами анализа, чтобы доказать, что у вас есть проблемы с производительностью.

4 голосов
/ 31 декабря 2011

Вы можете использовать NSOrderSet в качестве контейнера, представление over в Ссылке класса NSOrderedSet ниже:

NSOrderedSet и его подкласс NSMutableOrderedSet объявляют программные интерфейсы к упорядоченной коллекции объектов.

NSOrderedSet объявляет программный интерфейс для статических наборов различных объектов. Вы> устанавливаете записи статического набора при его создании, и после этого записи не могут быть> изменены. NSMutableOrderedSet, с другой стороны, объявляет программный интерфейс для> динамических наборов различных объектов. Динамический или изменяемый набор позволяет добавлять и удалять записи в любое время, автоматически распределяя память по мере необходимости.

Вы можете использовать упорядоченные наборы в качестве альтернативы массивам, когда важен порядок элементов> и производительность при проверке того, содержится ли объект в наборе, является соображением -> проверка на принадлежность массива медленнее, чем проверка на принадлежность из набора.

Визит http://developer.apple.com/library/mac/#documentation/Foundation/Reference/NSOrderedSet_Class/Reference/Reference.html

1 голос
/ 08 января 2014

containsObject:

Возвращает логическое значение, указывающее, присутствует ли данный объект в массиве.

  • (BOOL) containsObject: (идентификатор) anObject параметры объект Объект.

Возвращаемое значение ДА, если anObject присутствует в массиве, в противном случае НЕТ.

Обсуждение

Этот метод определяет, присутствует ли anObject в массиве, путем отправки сообщения isEqual: каждому из объектов массива (и передачи anObject в качестве параметра каждому сообщению isEqual:).

Объявлено в

NSArray.h

...