Sort Dictionary by keys Sort Dictionary by keys swift swift

Sort Dictionary by keys


let dictionary = [    "A" : [1, 2],    "Z" : [3, 4],    "D" : [5, 6]]let sortedKeys = Array(dictionary.keys).sorted(<) // ["A", "D", "Z"]

EDIT:

The sorted array from the above code contains keys only, while values have to be retrieved from the original dictionary. However, 'Dictionary' is also a 'CollectionType' of (key, value) pairs and we can use the global 'sorted' function to get a sorted array containg both keys and values, like this:

let sortedKeysAndValues = sorted(dictionary) { $0.0 < $1.0 }println(sortedKeysAndValues) // [(A, [1, 2]), (D, [5, 6]), (Z, [3, 4])]

EDIT2: The monthly changing Swift syntax currently prefers

let sortedKeys = Array(dictionary.keys).sort(<) // ["A", "D", "Z"]

The global sorted is deprecated.


To be clear, you cannot sort Dictionaries. But you can out put an array, which is sortable.

Swift 2.0

Updated version of Ivica M's answer:

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 })


If you want to iterate over both the keys and the values in a key sorted order, this form is quite succinct

let d = [    "A" : [1, 2],    "Z" : [3, 4],    "D" : [5, 6]]

Swift 1,2:

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

Swift 3+:

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