Swift按字典排序字典

时间:2014-12-24 16:52:36

标签: swift dictionary

我有一个字典[String : Double],其中包含以下数据:

Museum1 : 8785.8971799638
Museum2 : 34420.9643422388
Museum3 : 826.467789130732
Museum4 : 304120.342151219

我想按双值对字典进行排序。我做了一些研究,但所有的例子都被弃用了当前版本的Swift

我已尝试使用Sort Dictionary by values in Swift中的此代码:

for (k,v) in Array(self.museumsDic).sorted({$0.0 < $1.0}) {
    println("\(k):\(v)")
}

但它不起作用。如何按字符串对字典进行排序?

3 个答案:

答案 0 :(得分:11)

目前尚不清楚您的期望是什么。实际上没有排序字典这样的东西。除了错位的括号外,您的代码基本上是正确的。我试过这个:

let d = ["Museum1":8785.8971799638,
"Museum2":34420.9643422388,
"Museum3":826.467789130732,
"Museum4":304120.342151219]

for (k,v) in (Array(d).sorted {$0.1 < $1.1}) {
    println("\(k):\(v)")
}

结果:

Museum3:826.467789130732
Museum1:8785.8971799638
Museum2:34420.9643422388
Museum4:304120.342151219

如果您认为这是错误的,您需要解释原因。

答案 1 :(得分:1)

在Swift 2.2中,这可行

for (k,v) in (Array(d).sort {$0.1 < $1.1}) {
    print("\(k):\(v)")
}

Swift 3,它也有效:

for (k,v) in (Array(yourDictionary).sorted {$0.1 < $1.1}) {
    print("\(k):\(v)")
}

答案 2 :(得分:0)

Swift 4及更高版本的简单解决方案...

let dict = ["Museum1":8785.8971799638,
            "Museum2":34420.9643422388,
            "Museum3":826.467789130732,
            "Museum4":304120.342151219]

let dictSortByValue = dict.sorted(by: {$0.value < $1.value} )

for item in dictSortByValue {
   print("\(item.key) \(item.value) ")
}

// Museum3 826.467789130732 
// Museum1 8785.8971799638 
// Museum2 34420.9643422388 
// Museum4 304120.342151219 

显然,您可以在Swift 4中对Dictionary进行排序-无需转换为数组。