按键值排序字典

时间:2015-07-20 23:04:15

标签: swift sorting

let dict: [String:Int] = ["apple":5, "pear":9, "grape":1]

如何根据Int值对字典进行排序,以便输出为:

sortedDict = ["pear":9, "apple":5, "grape":1]

当前尝试(没有正确排序):

let sortedDict = sorted(dict) { $0.1 > $1.1 } 

4 个答案:

答案 0 :(得分:22)

您需要对字典值进行排序,而不是键。您可以从字典中创建一个元组数组,按其值排序:

Xcode 9•Swift 4 Xcode 8•Swift 3

let fruitsDict = ["apple": 5, "pear": 9, "grape": 1]
let fruitsTupleArray = fruitsDict.sorted{ $0.value > $1.value }

fruitsTupleArray // [(.0 "pear", .1 9), (.0 "apple", .1 5), (.0 "grape", .1 1)]

for (fruit,votes) in fruitsTupleArray {
    print(fruit,votes)
}

fruitsTupleArray.first?.key   // "pear"
fruitsTupleArray.first?.value   // 9

使用键对词典进行排序

let fruitsTupleArray = fruitsDict.sorted{ $0.key > $1.key }
fruitsTupleArray  // [(key "pear", value 9), (key "grape", value 1), (key "apple", value 5)]

使用键和本地化比较对字典进行排序:

let fruitsTupleArray = fruitsDict.sorted { $0.key.localizedCompare($1.key) == .orderedAscending  }

答案 1 :(得分:4)

字典无法排序。通常,当我需要从字典中排序的东西时,我会创建一个单独的字典键数组。

在您的情况下,创建一个键数组,通过比较它们在字典中的值来对它们进行排序。

答案 2 :(得分:0)

可以通过以下实现方式实现

let sortedDictionary = unsortedDictionary.sorted{$0.key > $1.key}

答案 3 :(得分:0)

使用 KeyValuePairs 代替 Dictionary

"字典中键值对的顺序在突变之间是稳定的,但在其他方面是不可预测的。如果您需要键值对的有序集合并且不需要 Dictionary 提供的快速键查找,请参阅 KeyValuePairs键入替代方案。” - Swift Dictionary