Как найти строку в NSArray?
Вопрос
Это кажется таким глупым вопросом, но как мне найти строку в NSArray
?
Я попробовал использовать
[array indexOfObjectIdenticalTo:myString]
но для этого необходимо, чтобы жало имело тот же адрес.
Есть ли у кого-нибудь советы о том, как это сделать?
Решение
Вы хотите метод indexOfObject:
, который ищет объект путем отправки каждому объекту в массиве сообщения isEqual:
. р>
Другие советы
Питер ответит правильно.
Еще одна заметка; если у вас есть тонны строк в массиве, -indexOfObject:
выполнит линейный поиск. Это может оказаться узким местом в производительности, для которого вам следует рассмотреть возможность использования другого контейнера; NSSet или NSDictionary, возможно (в зависимости от того, что означают строки).
Еще одна проблема: все строки относительно похожи и / или относительно длинные.
Конечно, ничего не оптимизируйте, пока не воспользуетесь инструментами анализа, чтобы доказать, что у вас есть проблемы с производительностью.
Вы можете использовать NSOrderSet в качестве контейнера, представление over в Ссылке класса NSOrderedSet приведено ниже:
NSOrderedSet и его подкласс NSMutableOrderedSet объявляют программные интерфейсы к упорядоченной коллекции объектов.
NSOrderedSet объявляет программный интерфейс для статических наборов различных объектов. Вы устанавливаете записи статического набора, когда он создается, и после этого записи не могут быть изменены. NSMutableOrderedSet, с другой стороны, объявляет программный интерфейс для > динамических наборов различных объектов. Динамический или изменяемый набор позволяет добавлять и удалять записи в любое время, автоматически распределяя память по мере необходимости.
Упорядоченные наборы можно использовать в качестве альтернативы массивам, когда важен порядок элементов > производительность при проверке того, содержится ли объект в наборе, является соображением & # 8212; > тестирование на членство в массиве медленнее, чем тестирование на членство в наборе.
содержитОбъект:
Возвращает логическое значение, указывающее, присутствует ли данный объект в массиве.
- (Bool) Содержит abobject: (id) параметры anobject anobject объект.
Возвращаемое значениеДА, если объект присутствует в массиве, в противном случае НЕТ.
Обсуждение
Этот метод определяет, присутствует ли объект в массиве, отправляя isEqual:сообщение каждому из объектов массива (и передача объекта в качестве параметра каждому isEqual:сообщение).
Объявлено в
NSArray.h