2

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

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

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

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

4 回答 4

8

使用适当的类型存储您的数据,对于日期NSDate,您可以使用:

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

假设array是一个NSArray对象NSDate

于 2013-06-04T11:37:02.767 回答
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];
}];
于 2013-06-04T11:37:33.690 回答
1

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

于 2013-06-04T11:41:25.507 回答
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,则在比较它时,将它们转换为日期并进行比较

于 2013-06-04T11:38:19.740 回答