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

 [@"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"]

Мне нужен вывод вроде:

[@"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
Ravikanth Manne 25 Фев 2015 в 07:50

2 ответа

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

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
Huy Nghia 25 Фев 2015 в 10:32
1
Обратите внимание, что если вы поменяете местами операнды сравнения, вы можете исключить оператор switch: return [date2 compare:date1]; Также обратите внимание, что создание NSDateFormatter является дорогостоящей операцией, как минимум, она должна быть поднята за пределы блока.
 – 
David Berry
25 Фев 2015 в 10:27
Спасибо чувак. Спас мой день. @HuyNghia: Просто на заметку, приведенный выше код предназначен для сортировки в порядке убывания. Чтобы сделать сортировку по возрастанию, просто замените дату1 на дату2 в этой строке: return [date2 compare:date1];
 – 
Shobhit C
22 Авг 2017 в 10:47

Сохраните даты как объекты 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];

Посетите этот вопрос: здесь

0
Community 23 Май 2017 в 15:20