如何按键对Swift词典数组进行排序

时间:2016-02-09 17:28:06

标签: swift

有类似的问题,但它们似乎并没有解决我的情况。我希望比我更聪明的人能够深入了解如何实现这一目标。我有一个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]]

我想重新排序它,以便数组按每个字典键的日期排序。

3 个答案:

答案 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。这在游乐场很好用,所以也适合你。