如何排序日期数组?

时间:2013-06-04 11:33:26

标签: iphone ios objective-c

我在数组中有一个日期,如下所示,我想对它进行排序。

 NSMutableArray *arrDates =[[NSMutableArray alloc]init];
[arrDates addObject:@"24/01/2010"];
[arrDates addObject:@"15/05/2014"];
[arrDates addObject:@"04/03/2011"];
[arrDates addObject:@"30/05/2013"];
[arrDates addObject:@"11/10/2012"];

我尝试使用下面的代码,但是我没有得到我应该在这里完全按键传递的内容。

NSSortDescriptor *sortDis = [[NSSortDescriptor alloc] initWithKey:????? ascending:TRUE];
[arr sortUsingDescriptors:[NSArray arrayWithObject:sortDis]];

我通过自我,但仅根据日期(日期)进行排序。

我想显示结果如下

24/01/2010
04/03/2011
11/10/2012
30/05/2013
15/05/2014

我也试过下面的行

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

但没用。请帮忙。

4 个答案:

答案 0 :(得分:7)

使用适当的类型存储您的数据,日期为NSDate,然后您可以使用:

NSArray *sorted = [array sortedArrayUsingComparator:^NSComparisonResult(NSDate *date1, NSDate *date2) {
    return [date1 compare:date2];
}];

假设arrayNSArrayNSDate个对象。

答案 1 :(得分:4)

尝试

NSMutableArray *arrDates =[[NSMutableArray alloc]init];
[arrDates addObject:@"24/01/2010"];
[arrDates addObject:@"15/05/2014"];
[arrDates addObject:@"04/03/2011"];
[arrDates addObject:@"30/05/2013"];
[arrDates addObject:@"11/10/2012"];

NSDateFormatter *dateFormatter = [NSDateFormatter new];
[dateFormatter setDateFormat:@"dd/MM/yyyy"];
[arrDates sortUsingComparator:^NSComparisonResult(id obj1, id obj2) {
    NSDate *date1 = [dateFormatter dateFromString:obj1];
    NSDate *date2 = [dateFormatter dateFromString:obj2];
    return [date1 compare:date2];
}];

答案 2 :(得分:1)

您需要将它们添加为NSDate对象,为此使用它:

NSString *dateString = @"01/02/2010";
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"dd-MM-yyyy"];
NSDate *dateFromString = [[NSDate alloc] init];
dateFromString = [dateFormatter dateFromString:dateString];
[dateFormatter release];

一旦数组包含NSDates,它将被正确排序

或者,如果您不想存储NSDates,在进行比较时,将它们转换为日期并进行比较

答案 3 :(得分:0)

将日期作为 NSDate 对象存储在 NS(可变)数组中,然后使用 [NSArray sortedArrayUsingSelector: [NSMutableArray sortUsingSelector:并传递 @selector(compare :) 作为参数。 - [NSDate compare:] 方法将按升序为您排序日期。