Вопрос

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

Я попробовал использовать

[array indexOfObjectIdenticalTo:myString]

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

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

Это было полезно?

Решение

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

Другие советы

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

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

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

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

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

  

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

     

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

     

Упорядоченные наборы можно использовать в качестве альтернативы массивам, когда важен порядок элементов > производительность при проверке того, содержится ли объект в наборе, является соображением & # 8212; > тестирование на членство в массиве медленнее, чем тестирование на членство в наборе.

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

содержитОбъект:

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

  • (Bool) Содержит abobject: (id) параметры anobject anobject объект.

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

Обсуждение

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

Объявлено в

NSArray.h

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