Как определить индекс массива в Objective C?
-
16-09-2019 - |
Вопрос
У меня есть два массива в Objective C, и мне нужно найти какой-то индекс, чтобы я мог вставить его в одно и то же место.Например, предположим, что у меня есть «массив имен» и «массив возраста».Как мне узнать, какой индекс «Чарли» находится в «массиве имен», чтобы я знал, куда вставить его возраст в массив «возраст»?
Спасибо
Решение
-[NSArray indexOfObject:]
казалось бы, логичный выбор.
Другие советы
В Cocoa параллельные массивы — это путь к гибели и разрушению.Вы не сможете эффективно использовать их с привязками, поэтому вместо этого вам придется писать много связующего кода, как если бы привязок не существовало.Более того, вы уничтожаете любую будущую поддержку AppleScript/Scripting Bridge, которую вы, возможно, захотите иметь, еще до того, как начнете ее реализовывать.
Правильный способ — создать класс модели с name
и age
свойства и иметь один массив экземпляров этого класса.Затем, чтобы найти элемент по имени или возрасту, используйте NSPredicate
для фильтрации массива и indexOfObjectIdenticalTo:
чтобы найти индекс каждого элемента отфильтрованного массива в основном массиве.
Разница между indexOfObject:
и indexOfObjectIdenticalTo:
в том, что бывший отправит isEqual:
сообщения, чтобы определить, является ли каждый объект тем, который он ищет, тогда как последний будет искать только конкретный объект, который вы передали.Таким образом, вы можете использовать indexOfObject:
с объектом, которого нет в массиве, но равен ему, чтобы найти равный объект в массиве.
Возможно, вам также захочется использовать NSDictionary, если вы выполняете поиск на основе строк.