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 (делай то, что я имею в виду), как ты говоришь.