如何按降序排列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];