按键sorting字典
我想在Swift中sorting字典。 我有一个字典,如:
"A" => Array[] "Z" => Array[] "D" => Array[]
等我想要它像
"A" => Array[] "D" => Array[] "Z" => Array[]
等等
我已经尝试了很多解决scheme,但没有人为我工作。 我正在使用XCode6 Beta 5,并且有一些编译器出错,一些解决scheme给出了exception。 所以任何人都可以发布字典sorting的工作副本。
let dictionary = [ "A" : [1, 2], "Z" : [3, 4], "D" : [5, 6] ] let sortedKeys = Array(dictionary.keys).sorted(<) // ["A", "D", "Z"]
编辑:
上述代码中的sorting数组仅包含键,而值必须从原始字典中检索。 然而, 'Dictionary'
也是(key,value)对的'CollectionType'
,我们可以使用全局的'sorted'
函数来得到一个包含键和值的有序数组,如下所示:
let sortedKeysAndValues = sorted(dictionary) { $0.0 < $1.0 } println(sortedKeysAndValues) // [(A, [1, 2]), (D, [5, 6]), (Z, [3, 4])]
编辑2:目前更喜欢每月更改Swift语法
let sortedKeys = Array(dictionary.keys).sort(<) // ["A", "D", "Z"]
全局sorted
已被弃用。
Swift 2.0
Ivica M的更新版本的答案是:
let wordDict = [ "A" : [1, 2], "Z" : [3, 4], "D" : [5, 6] ] let sortedDict = wordDict.sort { $0.0 < $1.0 } print("\(sortedDict)") //
Swift 3
wordDict.sorted(by: { $0.0 < $1.0 })
注意:
你们中的一些人似乎很惊讶,结果数组不是一本字典。 字典不能sorting ! 结果数据types是一个有序数组,就像@ Ivica的答案一样。
如果你想以键sorting的顺序遍历键和值,这个表格是非常简洁的
let d = [ "A" : [1, 2], "Z" : [3, 4], "D" : [5, 6] ] for (k,v) in Array(d).sorted({$0.0 < $1.0}) { println("\(k):\(v)") }
在iOS 9&xcode 7.3中“sorting”,swift 2.2是不可能的,将“sorted”改为“sort”,如下所示:
let dictionary = ["main course": 10.99, "dessert": 2.99, "salad": 5.99] let sortedKeysAndValues = Array(dictionary).sort({ $0.0 < $1.0 }) print(sortedKeysAndValues) //sortedKeysAndValues = ["desert": 2.99, "main course": 10.99, "salad": 5.99]
对于Swift 3来说,以下types通过键来返回sorting字典:
let unsortedDictionary = ["4": "four", "2": "two", "1": "one", "3": "three"] let sortedDictionary = unsortedDictionary.sorted(by: { $0.0.key < $0.1.key }) print(sortedDictionary) // ["1": "one", "2": "two", "3": "three", "4": "four"]
对于Swift 3来说,下面的代码对我有效,Swift 2语法没有奏效:
// menu is a dictionary in this example var menu = ["main course": 10.99, "dessert": 2.99, "salad": 5.99] let sortedDict = menu.sorted(by: <) // without "by:" it does not work in Swift 3