добавление объектов в массив Mutable - PullRequest
0 голосов
/ 14 сентября 2011

Я хочу добавить элементы в изменяемый массив из словаря.Проблема в том, что я хочу проверить существующие элементы массива перед добавлением нового элемента.Если этот же элемент уже есть в массиве, я хочу заменить его.еще добавить новый элемент.Как я мог это сделать?

Ответы [ 3 ]

2 голосов
/ 14 сентября 2011

Возможно, вы можете использовать NSMutableSet вместо NSMutableArray.addObject * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * вы можете проверить членство в группе, если он еще не является членом.

проверить результат:

[mySet containsObject:myObjectFromDictionary]

..., который возвращает простое значение BOOL, указывающее, содержит ли набор объект, метод которого isEqual возвращает true, когда ваш объект передается вit.

(Для небольшой дополнительной функциональности NSCountingSet будет отслеживать количество объектов, добавленных в «набор», для которых isEqual: возвращает true)

1 голос
/ 14 сентября 2011

На первый взгляд, ответы Винсента и Рича верны.

Однако в исходном вопросе есть концептуальная проблема, которая не была решена.

А именно, что «членство в массиве» через indexOfObject: (или containsObject: в наборе) в конечном итоге достигается путем сравнения двух объектов с использованием isEqual:.

Если isEqual: вернет ДА, то, черт побери, эти два объекта, скорее всего, будут функционально идентичны в вашем коде, иначе у вас возникнут другие, значительно более серьезные, проблемы в вашем дизайне и реализации.

Таким образом, реальный вопрос должен звучать так: «Как я могу определить, есть ли уже объект в массиве, и не добавить его?» и ответ Рича и Винсента все еще верен.

т.е. вам нужно только проверить наличие и не предпринимать никаких действий.

(Обратите внимание, что существуют эзотерические ситуации, когда замена на самом деле оправдана, но оба они действительно эзотерические и обычно не используются в контексте изменяемой коллекции)

1 голос
/ 14 сентября 2011

Вы можете сравнить результат: [yourArray indexOfObject:yourObject]; с NSNotFound, чтобы узнать, находится ли объект в массиве.
Он даст вам индекс заменяемого объекта или, если он равен NSNotFound, вы добавите его.
Равенство объектов проверяется методом isEqual:.
Ссылка на класс NSArray .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...