我有一个解析为数组的NSDictionary,其中一个元素是date,我尝试使用[startimeArray sortUsingSelector:@selector(compare:)];
(starttimeArray)是我的日期,但它只安排升序。我怎样才能按降序排序。感谢
答案 0 :(得分:38)
通过将 NO 作为升序参数:
对数组进行排序NSSortDescriptor *descriptor=[[NSSortDescriptor alloc] initWithKey:@"self" ascending:NO];
NSArray *descriptors=[NSArray arrayWithObject: descriptor];
NSArray *reverseOrder=[dateArray sortedArrayUsingDescriptors:descriptors];
答案 1 :(得分:19)
您可以使用比较器块
NSArray *sortedArray = [array sortedArrayUsingComparator: ^(NSDate *d1, NSDate *d2) {
return [d1 compare:d2];
}];
要撤销订单,只需交换日期
NSArray *sortedArray = [array sortedArrayUsingComparator: ^(NSDate *d1, NSDate *d2) {
return [d2 compare:d1];
}];
或 - 当compare:
返回一个NSComparisonResult,实际上是typedef'ed到整数见下面 - 只需乘以-1
NSArray *sortedArray = [array sortedArrayUsingComparator: ^(NSDate *d1, NSDate *d2) {
return -1* [d1 compare:d2];
}];
enum {
NSOrderedAscending = -1,
NSOrderedSame,
NSOrderedDescending
};
typedef NSInteger NSComparisonResult;
答案 2 :(得分:2)
我使用reverseObjectEnumerator
NSArray
方法
startimeArray = [startimeArray sortUsingSelector:@selector(compare:)];
startimeArray = [[startimeArray reverseObjectEnumerator] allObjects];
当您需要按升序和降序排序数组时,它非常有用,因此您可以轻松返回上一个排序。
答案 3 :(得分:1)
检查解决方案有快速解决方案:
let sortedArray = randomArray.sortedArrayUsingComparator { (d1, d2) -> NSComparisonResult in
return (d1 as! NSDate).compare(d2 as! NSDate)
}
答案 4 :(得分:1)
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))
})
上面的代码是我的一个项目的片段。它使用帮助程序类对我的日志进行排序,最新日期位于数组的左侧。 $符号为positional parameter
答案 5 :(得分:0)
在初始化Array元素的类中。
-(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];