Как я могу заставить NSMutableArray принимать уникальные значения?

NSMutableArray *sectionTitles;
[sectionTitles addObject:due];

Как добавить уникальные значения в массив?

Ответы

Ответ 1

См. ответ Rudolph

Мой старый ответ ниже устарел и был на некоторое время. Ссылка Рудофа на NSOrderedSet/NSMutableOrderedSet является правильной, поскольку эти классы были добавлены после этого Q и моего A.

Старый ответ

Как сказал Ричард, NSMutableSet работает хорошо, но только если вам не нужно поддерживать упорядоченную коллекцию. Если вам нужна упорядоченная коллекция, вам будет проще проверить содержимое:

if (![myMutableArray containsObject:newObject])
    [myMutableArray addObject:newObject];

Обновление на основе комментария

Вы можете обернуть это методом, подобным -addUniqueObject:, и поместить его в категорию NSMutableArray .

Ответ 2

Подробнее 2012-й ответ (в случае, если кто-то наткнулся на это в будущем):

Используйте NSOrderedSet и NSMutableOrderedSet.

Заметка о производительности прямо из NSOrderedSet docs:

Вы можете использовать упорядоченные наборы как альтернативу массивам, когда порядок элементов важен, а производительность при проверке того, содержит ли объект в наборе, - это тестирование для членства в массиве медленнее, чем тестирование для членство в наборе.