如何按降序排列date数组

我有一个NSDictionaryparsing为一个数组的一个元素是date,我试着用[startimeArray sortUsingSelector:@selector(compare:)]; (starttimeArray)是我的date,但它只能按升序排列。 我怎么能按降序排列 谢谢

NOsorting为升序参数:

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

您可以使用比较器块

 NSArray *sortedArray = [array sortedArrayUsingComparator: ^(NSDate *d1, NSDate *d2) { return [d1 compare:d2]; }]; 

为了逆转订单,只需交换date

 NSArray *sortedArray = [array sortedArrayUsingComparator: ^(NSDate *d1, NSDate *d2) { return [d2 compare:d1]; }]; 

或者 – 作为compare:返回一个NSComparisonResult,它实际上是typedef到整数见下面 – 只是乘以-1

 NSArray *sortedArray = [array sortedArrayUsingComparator: ^(NSDate *d1, NSDate *d2) { return -1* [d1 compare:d2]; }]; 

 enum { NSOrderedAscending = -1, NSOrderedSame, NSOrderedDescending }; typedef NSInteger NSComparisonResult; 

我会使用NSArray的内置的reverseObjectEnumerator方法

 startimeArray = [startimeArray sortUsingSelector:@selector(compare:)]; startimeArray = [[startimeArray reverseObjectEnumerator] allObjects]; 

当你需要按升序和降序排列的数组时,这很有用,所以你可以很容易地回到以前的sorting。

检查的解决scheme有很快的解决scheme:

 let sortedArray = randomArray.sortedArrayUsingComparator { (d1, d2) -> NSComparisonResult in return (d1 as! NSDate).compare(d2 as! NSDate) } 

Swift 3.0

对于任何使用swift 3.0的人来说,这个DateHelper会为你节省一些头痛的问题。

  filteredLogs.sort(by: { let firstElement = $0.timeStamp! as Date let secondElement = $1.timeStamp! as Date return firstElement.compare(.isEarlier(than: secondElement)) }) 

上面的代码是我的一个项目的一个片段。 它使用助手类来sorting我的日志与数组左边的最近date。 $符号是一个位置参数

在正在初始化数组元素的类中。

 -(NSComparisonResult) compareArray: (id) element { Return [ArrayElement compare: [element ArrayElement]]; } -(NSComparisonResult) compareArrayReverse: (id) element { Return [[element ArrayElement] compare: ArrayElement]; } 

然后在初始化startimeArray的类中:

 @synthesize ArrayName; -(void) sort: (BOOL) sel { if (sel) { [ArrayName sortUsingSelector: @selector(compareArray:)]; } else { [ArrayName sortUsingSelector: @selector(compareArrayReverse:)]; } } 

然后在main()中:

 // Sort the array. sort = TRUE - ascending order, sort = FALSE - descending order. [startimeArray sort: FALSE];