Ответ 1
Вы хотите метод indexOfObject:
, который ищет объект, отправив каждый объект в массив isEqual:
.
Это похоже на такой глупый вопрос, но как я могу найти строку в NSArray
?
Я попытался использовать
[array indexOfObjectIdenticalTo:myString]
но для этого требуется, чтобы у него был тот же адрес.
Есть ли у кого-нибудь советы о том, как это сделать?
Вы хотите метод indexOfObject:
, который ищет объект, отправив каждый объект в массив isEqual:
.
Ответ Питера правильный.
Еще одно примечание; если у вас есть тонны и тонны строк в массиве, -indexOfObject:
будет выполнять линейный поиск. Это может оказаться узким местом производительности, для которого вы должны рассмотреть возможность использования другого контейнера; NSSet или NSDictionary, возможно (в зависимости от того, что означают строки).
Еще одна проблема заключается в том, что строки все относительно похожие и/или относительно длинные.
Конечно, не беспокойтесь о том, чтобы оптимизировать что-либо, пока вы не использовали инструменты анализа, чтобы доказать, что у вас проблема с производительностью.
Вы можете использовать NSOrderSet в качестве контейнера, более подробное описание в описании класса NSOrderedSet приведено ниже:
NSOrderedSet и его подкласс NSMutableOrderedSet объявляют программные интерфейсы упорядоченной коллекции объектов.
NSOrderedSet объявляет программный интерфейс для статических множеств различных объектов. Вы > устанавливаете статические записи установок при их создании, а затем записи не могут быть изменены. С другой стороны, NSMutableOrderedSet объявляет программный интерфейс для > динамических наборов отдельных объектов. Динамический или изменяемый набор позволяет добавлять и удалять записи в любое время, автоматически выделяя память по мере необходимости.
Вы можете использовать упорядоченные наборы как альтернативу массивам, когда важно порядок элементов > и производительность при проверке того, содержит ли объект в наборе, - это рассмотрение- > тестирование для членства в массиве медленнее, чем тестирование для членства множества.
containsObject:
Возвращает логическое значение, указывающее, присутствует ли данный массив в массиве.
Возвращаемое значение ДА, если в массиве присутствует anObject, в противном случае NO.
Обсуждение
Этот метод определяет, присутствует ли anObject в массиве, отправив сообщение isEqual: каждому из объектов массивов (и передавая anObject в качестве параметра для каждого сообщения isEqual:).
Объявлено в
NSArray.h