5

我正在做一些对 NSMutableArray 中的日期字符串进行排序的小工作,我正在从 sqlite db 获取数组。如果你打印它显示的数组是这样的

日期字符串是(“2011-05-01”、“2011-02-01”、“2012-01-08”、“2012-05-08”、“2010-01-09”)

我想按升序显示日期。请帮帮我......我是objc的新手......

4

3 回答 3

22

首先,您应该将所有日期字符串(即NSString)对象转换为NSDate对象,然后对它们进行排序dateObjects

我相信你已经dateArray包含了所有这些字符串。

NSSortDescriptor *descriptor = [[NSSortDescriptor alloc] initWithKey:@"self" 
                                                           ascending:NO];
NSArray *descriptors = [NSArray arrayWithObject:descriptor];
NSArray *reverseOrder = [dateArray sortedArrayUsingDescriptors:descriptors];

或者

NSArray *reverseOrderUsingComparator = [dateArray sortedArrayUsingComparator: 
                                       ^(id obj1, id obj2) {
                                           return [obj2 compare:obj1];
                                       }];
于 2012-12-02T07:28:21.367 回答
5

如果您的日期确实是 format 中的字符串YYYY-mm-dd,如您的问题所示,那么这将按升序对它们进行排序:

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

如果您的日期实际上是NSDate对象,这也将起作用。

如果要创建数组的排序副本:

NSArray *sortedArray = [arrayOfDates sortedArrayUsingSelector:@selector(compare:)];
于 2012-12-02T07:28:42.450 回答
1

一般来说,排序应该由数据库完成。sqlite3 支持order by

于 2012-12-02T08:05:26.567 回答