如何按字符串升序对包含日期的数组进行排序

时间:2015-02-25 04:50:32

标签: ios objective-c nsdate nsdateformatter

我有字典数组,在每个字典中都包含一个日期参数。日期参数数组(包含在词典中)如下:

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

2 个答案:

答案 0 :(得分: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 :(得分: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