NSMutableOrderedSet addObject не упорядочен

У меня есть NSMutableOrderedSet который содержит NSDate объекты. Первоначально, вот значения:

2014-10-08 12:46:48 +0000
2014-10-08 12:46:42 +0000

После звонка addObject с 2014-10-08 12:45:40 +0000Я получаю следующий вывод:

2014-10-08 12:46:42 +0000
2014-10-08 12:46:48 +0000
2014-10-08 12:45:40 +0000

Почему они не заказаны?

3 ответа

Решение

NSMutablOrderedSet не похож на Java TreeSet который хранится отсортированным. смотреть на addObject: документация:

Добавляет данный объект в конец изменяемого упорядоченного набора, если он еще не является членом.

Вы должны вручную позвонить

- (void)sortUsingDescriptors:(NSArray *)sortDescriptors

или же

- (void)sortUsingComparator:(NSComparator)cmptr

У меня нет ответа на вопрос, почему они не заказаны, но вы можете отсортировать их по дате, выполнив следующее:

NSArray *mySortedArray =[myArray sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {

    NSComparisonResult result;

    NSDate *dateA = (NSDate*)obj1;
    NSDate *dateB = (NSDate*)obj2;

    result = [dateA compare:dateB];

    return result;
}];

Это в основном как массив NSMutable, но без дублирующих объектов. Документы говорят, что addObjec: добавляет его в конец. Вам необходимо применить сортировку одним из следующих способов

- sortUsingDescriptors:

- sortUsingComparator:

- sortWithOptions: usingComparator:

- sortRange: параметры: usingComparator:

Думайте об этом семантически так же, как взятие NSMutableSet, у которого нет порядка, создание NSMutableArray из этого и затем не любящий порядок массива. Вы должны сказать, как сортировать. NSMutableOrderedSet не имеет встроенного алгоритма DWIM (делай то, что я имею в виду), как ты говоришь.

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