有类似的问题,但它们似乎并没有解决我的情况。我希望比我更聪明的人能够深入了解如何实现这一目标。我有一个Swift数组字典,格式为:
[[NSDate: Double]]
目前,我的阵列目前看起来像这样:
[[2016-02-09 17:20:51 +0000: 0.0], [2016-02-05 17:20:51 +0000: 0.0], [2016-02-08 17:20:51 +0000: 233.0], [2016-02-07 17:20:51 +0000: 88.0], [2016-02-06 17:20:51 +0000: 88.0], [2016-02-04 17:20:51 +0000: 196.0], [2016-02-03 17:20:51 +0000: 961.0]]
我想重新排序它,以便数组按每个字典键的日期排序。
答案 0 :(得分:4)
Swift 2
let dicts = [[NSDate: Double]]()
let sortedDicts = dicts.sort { (dict1, dict2) in
if let date1 = dict1.keys.first,
date2 = dict2.keys.first {
return date1.compare(date2) == NSComparisonResult.OrderedAscending
}
return false
}
Swift 3
let dicts = [[Date: Double]]()
let sortedDicts = dicts.sorted { (dict1, dict2) in
if let date1 = dict1.keys.first,
date2 = dict2.keys.first {
return date1.compare(date2) == ComparisonResult.orderedAscending
}
return false
}
答案 1 :(得分:3)
如果arr
是您的单元素词典数组,并且您对arr
的引用是var
引用,那么我会写
arr.sortInPlace {$0.keys.first!.timeIntervalSince1970 < $1.keys.first!.timeIntervalSince1970}
但我同意Sulthan的观点,即一个单元素字典数组是一个非常奇怪的数据结构。有一个字典(日期 - 双对)更有意义。它没有顺序,但按顺序从中提取一个数组(日期 - 双对)是微不足道的。
答案 2 :(得分:2)
var datesDict:[[NSDate:Double]] = [[NSDate():0.1], [NSDate().dateByAddingTimeInterval(60):1.1], [NSDate().dateByAddingTimeInterval(-60):0.1]]
print(datesDict)
datesDict.sortInPlace { (item1:[NSDate:Double], item2:[NSDate:Double]) -> Bool in
return item1.keys.first?.compare(item2.keys.first!) == NSComparisonResult.OrderedAscending
}
基本上,您在数组上使用sortInPlace函数,并在比较块中比较作为日期对象的键,如果其升序为false,则返回true。这在游乐场很好用,所以也适合你。