2015-02-25 2 views
0

У меня есть набор словарей, в каждом словаре содержится один параметр даты. Массив параметров даты (содержит в словарях) следующим образом:
Как сортировать массив, содержащий дату в строках в порядке возрастания

[@"16-1-2015 7:00PM",@"15-1-2014 11:30AM",@"14-1-2014 7:00PM", 
@"15-1-2015 6:30AM "[email protected]"16-1-2015 8:30PM"] 

мне нужен выход, как:

[@"16-1-2015 8:30PM",@"16-1-2015 7:00PM",@"15-1-2015 6:30AM ", 
@"15-1-2014 11:30AM",@"14-1-2014 7:00PM"]; 
+0

http://stackoverflow.com/questions/28271322/sort-nsarray-by-date-and-time - –

+0

@ravikanth manne, пожалуйста, перейдите по этой ссылке. Надеюсь, это поможет вам ... http: // stackoverflow. com/questions/1132806/sort-nsarray-of-date-strings-or-objects –

ответ

0

магазин даты как NSDate объекты в NSMutableArray, а затем использовать -[NSArray sortedArrayUsingSelector:] or -[NSMutableArray sortUsingSelector:] и передать @selector(compare:), как параметр. Метод -[NSDate compare:] будет заказывать даты в порядке возрастания для вас. Это проще, чем создание NSSortDescriptor и гораздо проще, чем создание собственной функции сравнения. (NSDate объекты знают, как, по крайней мере, столь же эффективно сравнивать себя друг с другом, как мы могли бы надеяться достичь с помощью специального кода.)

Или

Если у меня есть NSMutableArray объектов с полем «BeginDate» типа NSDate Я использую NSSortDescriptor, как показано ниже:

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"beginDate" ascending:TRUE]; 
[myMutableArray sortUsingDescriptors:[NSArray arrayWithObject:sortDescriptor]]; 
[sortDescriptor release]; 

, пожалуйста, посетите этот вопрос: here

1

Вы можете попробовать это:

NSArray *dateStringArray = @[ @"16-1-2015 7:00PM", @"15-1-2014 11:30AM", @"14-1-2014 7:00PM", @"15-1-2015 6:30AM ", @"16-1-2015 8:30PM" ]; 

- (NSArray *)sortDateStringArray:(NSArray *)dateStringArray 
    { 
     NSDateFormatter *dateFormater = [[NSDateFormatter alloc] init]; 
     [dateFormater setDateFormat:@"dd-MM-yyyy h:mma"]; 
     NSArray *sortedArray = [dateStringArray sortedArrayUsingComparator:^NSComparisonResult(NSString *obj1, NSString *obj2) { 
      NSDate *date1 = [dateFormater dateFromString:obj1]; 
      NSDate *date2 = [dateFormater dateFromString:obj2]; 
      return [date2 compare:date1]; 
     }]; 
     return sortedArray; 
    } 

Я думаю, что лучше конвертировать DateString в NSDate затем сравнить
Надеюсь, что это помощь !!!

+1

Обратите внимание, что если вы поменяете операнды сравнения, вы можете исключить оператор switch: 'return [date2 compare: date1];' Также обратите внимание, что построение 'NSDateFormatter' - это дорогостоящая операция, как минимум, она должна быть поднята за пределы блока. –

+0

спасибо за ваш комментарий :) Я отредактировал мой ответ –

+0

Спасибо человеку. Спас мой день. @HuyNghia: Только хэдз-ап, приведенный выше код предназначен для сортировки в порядке убывания. Чтобы сделать его восходящим, просто замените date1 на date2 в этой строке: return [date2 compare: date1]; –