Как сортировать NSMutableArray объектов даты

Я делаю небольшую работу по сортировке строк даты в NSMutableArray, я получаю массив из sqlite db. Если вы печатаете массив, он отображается так

строки даты ("2011-05-01", "2011-02-01", "2012-01-08", "2012-05-08", "2010-01-09" )

Я хочу показать даты в порядке возрастания. Пожалуйста, помогите мне, ребята..... Я новичок в objc..


person Joker    schedule 02.12.2012    source источник


Ответы (3)


Сначала вы должны преобразовать все объекты строк даты (то есть NSString) в объекты NSDate, а затем отсортировать эти dateObjects.

Я полагаю, что у вас есть dateArray, содержащий все эти строки.

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

OR

NSArray *reverseOrderUsingComparator = [dateArray sortedArrayUsingComparator: 
                                       ^(id obj1, id obj2) {
                                           return [obj2 compare:obj1];
                                       }];
person Anoop Vaidya    schedule 02.12.2012
comment
Формат даты, который он показал в своем вопросе, будет правильно сортироваться даже в виде строк. - person rob mayoff; 02.12.2012
comment
В этом нет необходимости, он может просто расставить струны так, как они есть прямо сейчас. - person TheAmateurProgrammer; 02.12.2012
comment
Спасибо, чувак... Я использовал второй, но он показывает объекты массива в порядке убывания... как я могу сделать это по возрастанию - person Joker; 02.12.2012

Если ваши даты действительно являются строками в формате YYYY-mm-dd, как в вашем вопросе, то это отсортирует их в порядке возрастания:

[arrayOfDates sortUsingSelector:@selector(compare:)];

Это также будет работать, если ваши даты на самом деле являются NSDate объектами.

Если вы хотите создать отсортированную копию массива:

NSArray *sortedArray = [arrayOfDates sortedArrayUsingSelector:@selector(compare:)];
person rob mayoff    schedule 02.12.2012

Сортировка должна быть сделана, imo, по базе данных в целом. sqlite3 поддерживает порядок по.

person hd1    schedule 02.12.2012