2014-10-08 2 views
0

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

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 

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

ответ

2

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

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

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

- (void)sortUsingDescriptors:(NSArray *)sortDescriptors 

или

- (void)sortUsingComparator:(NSComparator)cmptr 
+0

Итак, в основном это 'NSMutableArray', который не позволяет мне вставлять один и тот же элемент дважды? –

+0

Он имеет все общие операции набора: объединение, пересечение, разность. Они должны быть более эффективными при работе с другими отсортированными наборами (или наборами вообще) – Jack

+0

Точно. Какой порядок вы ожидали от этого автоматически? Заказ означает, что он будет отслеживать позицию позиций. Если вы измените эту позицию, они запомнят их. Это не означает «сортировка», что, как я думаю, вы считали. – Fogmeister

1

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

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; 
}]; 
+0

Да, я просто сделал это. Я пытаюсь обернуть голову вокруг «NSOrderedSet» в Objective-C, но я не могу ее получить. В Java или C++ при вставке чего-то он автоматически сортируется. –

0

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

- sortUsingDescriptors:

- sortUsingComparator:

- sortWithOptions: usingComparator:

- sortRange: Варианты: usingComparator:

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

 Смежные вопросы

  • Нет связанных вопросов^_^