сортировка NSArray NSDates - PullRequest
       1

сортировка NSArray NSDates

11 голосов
/ 04 декабря 2010

У меня есть NSArray объектов NSDate, и я хочу отсортировать их так, чтобы сегодня было 0, вчера было 1 и т. Д.

Это восходящий или нисходящий, и я использую функцию, селектор или что?

Ответы [ 2 ]

38 голосов
/ 04 декабря 2010

Существуют разные методы сортировки для NSArray, потому что могут быть разные способы сортировки.NSSortDescriptors - это общий способ, который дает вам множество опций в отношении того, какие ключи использовать при сортировке, какие селекторы вы хотите использовать для этих ключей, а также общий порядок их использования и т. Д. Или вместо этого вы можете использовать функции или блоки сравнения, есливаш случай требует этого или, если это более удобно для вашего конкретного случая.

Чтобы ответить на ваш первый вопрос, если вы хотите, чтобы сегодня был первый, а затем вчера, тогда да, это, конечно, в порядке убывания.

Чтобы отсортировать некоторые даты в порядке убывания, вы можете просто сделать это: (при условии, что NSArray полон NSDates под названием dateArray):

NSSortDescriptor *descriptor = [[NSSortDescriptor alloc] initWithKey:@"self" ascending:NO];
NSArray *descriptors = [NSArray arrayWithObject: descriptor];
[descriptor release];

NSArray *reverseOrder = [dateArray sortedArrayUsingDescriptors:descriptors];

Или, если вы создаете для iOS 4+ илиСнежный барс + вы можете сделать это:

NSArray *reverseOrderUsingComparator = [dateArray sortedArrayUsingComparator: 
                                       ^(id obj1, id obj2) {
                                           return [obj2 compare:obj1]; // note reversed comparison here
                                       }];
0 голосов
/ 22 июля 2015

Попробуйте это волшебство:

Сортировка массива дат в порядке возрастания.

то есть даты, получающиеся все позже и позже, или, говоря иначедаты идут в будущее.

NSArray ascendingDates = [dates sortedArrayUsingSelector:@selector(compare:)];

Сортировка массива дат в порядке убывания. (что задал вопрос)

т.е. получение датраньше и раньше даты уходят в прошлое или, другими словами, сегодня по индексу 0, вчера по индексу 1.

NSArray* descendingDates = [[[dates sortedArrayUsingSelector:@selector(compare:)] reverseObjectEnumerator] allObjects];
...