Как определить индекс массива в Objective C? - PullRequest
17 голосов
/ 16 июля 2009

У меня есть два массива в Objective C, и мне нужно найти какой-то индекс, чтобы я мог вставить его в то же место. Например, допустим, у меня есть «массив имен» и «возрастной массив». Как мне узнать, какой индекс "Чарли" находится в "массиве имен", чтобы я знал, куда вставить его возраст в массиве "возраст"?

Спасибо

Ответы [ 3 ]

38 голосов
/ 16 июля 2009

-[NSArray indexOfObject:] представляется логичным выбором.

6 голосов
/ 16 июля 2009

В Какао параллельные массивы - это путь к гибели и гибели. Вы не можете эффективно использовать их с Bindings, поэтому вам придется вместо этого написать много связующего кода, как если бы Bindings не существовал. Более того, вы убиваете любую будущую поддержку AppleScript / Scripting Bridge, которую вы, возможно, намереваетесь получить еще до того, как начнете ее реализовывать.

Правильный способ - создать класс модели со свойствами name и age и иметь единственный массив экземпляров этого класса. Затем, чтобы найти элемент по имени или возрасту, используйте NSPredicate для фильтрации массива и indexOfObjectIdenticalTo: для поиска индекса каждого элемента из отфильтрованного массива в основном массиве.

Разница между indexOfObject: и indexOfObjectIdenticalTo: заключается в том, что первый будет отправлять isEqual: сообщения, чтобы определить, является ли каждый объект тем, который он ищет, тогда как последний будет искать только конкретный объект, который вы передали. Таким образом, , вы можете использовать indexOfObject: с объектом, которого нет в массиве, но он равен объекту, который находится в массиве.

4 голосов
/ 16 июля 2009

Вы также можете просто использовать NSDictionary, если вы выполняете поиск на основе строк.

...