Cocoa 对NSDATE的NSArray进行排序

Cocoa 对NSDATE的NSArray进行排序,cocoa,nsarray,nsdate,Cocoa,Nsarray,Nsdate,我有一个NSDate对象的NSArray,我想对它们进行排序,以便今天是0,昨天是1等等 它是升序还是降序,我使用函数、选择器还是什么?NSArray有不同的排序方法,因为您可能需要不同的排序方法。NSSortDescriptor是一种通用方法,它为您提供了很多选项,包括排序时使用哪些键、在这些键上使用哪些选择器以及使用的总体顺序等。或者,如果您的情况需要,或者如果您的特定情况更方便,您可以使用函数或比较器块 要回答你的第一个问题,如果你想今天是第一个,然后是昨天,那么,是的,这当然是降序排列

我有一个NSDate对象的NSArray,我想对它们进行排序,以便今天是0,昨天是1等等


它是升序还是降序,我使用函数、选择器还是什么?

NSArray有不同的排序方法,因为您可能需要不同的排序方法。NSSortDescriptor是一种通用方法,它为您提供了很多选项,包括排序时使用哪些键、在这些键上使用哪些选择器以及使用的总体顺序等。或者,如果您的情况需要,或者如果您的特定情况更方便,您可以使用函数或比较器块

要回答你的第一个问题,如果你想今天是第一个,然后是昨天,那么,是的,这当然是降序排列

要按降序对某些日期进行排序,您只需执行以下操作:(假设NSArray中满是名为“dateArray”的NSDates):

或者,如果您正在为iOS 4+或Snow Leopard+构建,您可以这样做:

NSArray *reverseOrderUsingComparator = [dateArray sortedArrayUsingComparator: 
                                       ^(id obj1, id obj2) {
                                           return [obj2 compare:obj1]; // note reversed comparison here
                                       }];
试试这个魔术:

按升序对日期数组排序。

i、 日期变得越来越晚,或者换一种说法,日期将进入未来

按降序对日期数组排序。(问题的内容)

i、 日期越来越早,日期回到过去,或者换一种说法:今天在指数0,昨天在指数1

NSArray *reverseOrderUsingComparator = [dateArray sortedArrayUsingComparator: 
                                       ^(id obj1, id obj2) {
                                           return [obj2 compare:obj1]; // note reversed comparison here
                                       }];
NSArray ascendingDates = [dates sortedArrayUsingSelector:@selector(compare:)];
NSArray* descendingDates = [[[dates sortedArrayUsingSelector:@selector(compare:)] reverseObjectEnumerator] allObjects];