如何对日期对象的 NSMutableArray 进行排序

Posted

技术标签:

【中文标题】如何对日期对象的 NSMutableArray 进行排序【英文标题】:How to sort NSMutableArray of date objects 【发布时间】:2012-12-02 07:26:38 【问题描述】:

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

日期字符串是 ( "2011-05-01", "2011-02-01", "2012-01-08", "2012-05-08", "2010-01-09 )

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

【问题讨论】:

【参考方案1】:

首先您应该将所有日期字符串(即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];
                                       ];

【讨论】:

他在问题中显示的日期格式即使是字符串也会正确排序。 没必要,他可以把字符串按现在的样子排列。 很好,谢谢伙计....我使用了你的第二个,但它以降序显示数组对象...我怎样才能升序【参考方案2】:

如果您的日期确实是 YYYY-mm-dd 格式的字符串,就像您的问题一样,那么这将按升序对它们进行排序:

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

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

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

NSArray *sortedArray = [arrayOfDates sortedArrayUsingSelector:@selector(compare:)];

【讨论】:

【参考方案3】:

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

【讨论】:

以上是关于如何对日期对象的 NSMutableArray 进行排序的主要内容,如果未能解决你的问题,请参考以下文章

如何获取 NSMutableArray 特定对象

如何对数组中的日期进行分组?

创建一个包含多个 NSMutableDictionary 对象的 NSMutableArray

NSMutableArray 如何正确添加对象并释放

如何将唯一对象添加到 nsmutablearray?

如何从 NSMutableArray 中删除对象?