Как отключить сортировку для - allObjects в NSMutableSet?

В моем приложении OSX у меня есть NSMutableSet, который содержит пользовательские объекты. Я реализовал методы -isEqual и -hash в своих классах пользовательских объектов, чтобы набор мог сравнивать их так, как я хочу.

Однако всякий раз, когда я вставляю новый объект в свой набор и затем вызываю -allObjects, возвращаемый массив имеет объекты в отсортированном порядке.

Порядок зависит от значения свойства, которое я использую для сравнения моих пользовательских объектов в методе -isEqual, упомянутом выше.

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

Кто-нибудь знает, как этого добиться?

Любая помощь высоко ценится!

2 ответа

Решение

Наборы не имеют порядка, они специально предназначены для неупорядоченных коллекций. Когда вы звоните allObjects чтобы получить массив, порядок, который вы получаете, не определен, поэтому вы не должны зависеть от него.

У вас есть 2 основных варианта, если вы хотите продолжать использовать наборы.

  1. Закажите массив вручную, как только вы его получите.

  2. Используйте NSOrderedSet который поддерживает порядок.

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

Тогда не используйте набор, но NSArray,
Массивы хранят свои объекты в порядке, а наборы - нет.

Другие вопросы по тегам