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

Как найти строку в NSArray?

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

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

[array indexOfObjectIdenticalTo:myString]

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

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

4b9b3361

Ответ 1

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

Ответ 2

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

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

Еще одна проблема заключается в том, что строки все относительно похожие и/или относительно длинные.

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

Ответ 3

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

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

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

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

Посетите http://developer.apple.com/library/mac/#documentation/Foundation/Reference/NSOrderedSet_Class/Reference/Reference.html

Ответ 4

containsObject:

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

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

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

Обсуждение

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

Объявлено в

NSArray.h