排序NSD的NSArray

时间:2010-12-04 17:17:37

标签: cocoa nsarray nsdate

我有NSAd对象的NSArray,我想对它们进行排序,以便今天为0,昨天为1等。

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

2 个答案:

答案 0 :(得分:38)

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

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

要按降序排序某些日期,您可以这样做:(假设NSArray充满了名为'dateArray'的NSDate):

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

NSArray *reverseOrder = [dateArray sortedArrayUsingDescriptors:descriptors];

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

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

答案 1 :(得分:-1)

试试这个魔法:

按升序排序日期数组。

即。日期越来越晚,或换句话说,日期将来的日期。

NSArray ascendingDates = [dates sortedArrayUsingSelector:@selector(compare:)];

按降序排列日期数组。(问题是什么)

即。更早和更早的日期,过去的日期或另一种方式:今天是指数0,昨天是指数1.

NSArray* descendingDates = [[[dates sortedArrayUsingSelector:@selector(compare:)] reverseObjectEnumerator] allObjects];