Ordenar diccionario por claves

Quiero ordenar un diccionario en Swift. Tengo un diccionario como:

"A" => Array[] "Z" => Array[] "D" => Array[] 

etc. Quiero que sea como

 "A" => Array[] "D" => Array[] "Z" => Array[] 

etc.

He intentado muchas soluciones en SO, pero nadie trabajó para mí. Estoy usando XCode6 Beta 5 y algunos están dando error de comstackción y algunas soluciones están dando excepciones. Entonces, cualquiera que pueda publicar la copia de trabajo de clasificación de diccionarios.

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

EDITAR:

La matriz ordenada del código anterior solo contiene claves, mientras que los valores deben recuperarse del diccionario original. Sin embargo, 'Dictionary' también es un 'CollectionType' de pares (clave, valor) y podemos usar la función global 'sorted' para obtener una matriz ordenada que contenga tanto claves como valores, como esta:

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

EDIT2: la syntax cambiante mensual de Swift actualmente prefiere

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

El sorted global está en desuso.

Swift 2.0

Versión actualizada de la respuesta de 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 }) 

Darse cuenta:

Algunos de ustedes parecen sorprendidos de que la matriz resultante no sea un diccionario. ¡Los diccionarios no pueden ser ordenados ! El tipo de datos resultante es una matriz ordenada, al igual que en la respuesta de @ Ivica.

Si desea iterar sobre las claves y los valores en un orden clave ordenado, este formulario es bastante breve

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

En swift 4 puedes escribirlo de manera más inteligente:

 let d = [ 1 : "hello", 2 : "bye", -1 : "foo" ] d = [Int : String](uniqueKeysWithValues: d.sorted{ $0.key < $1.key }) 

“ordenado” en iOS 9 y xcode 7.3, swift 2.2 es imposible, cambie “ordenado” a “ordenar”, así:

 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] 

Para Swift 3, el siguiente tipo devuelve el diccionario ordenado por claves:

 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"] 

Intenté todo lo anterior, en resumen, todo lo que necesitas es

 let sorted = dictionary.sorted { $0.key < $1.key } let keysArraySorted = Array(sorted.map({ $0.key })) let valuesArraySorted = Array(sorted.map({ $0.value })) 

Para Swift 4, lo siguiente me ha funcionado:

 let dicNumArray = ["q":[1,2,3,4,5],"a":[2,3,4,5,5],"s":[123,123,132,43,4],"t":[00,88,66,542,321]] let sortedDic = dicNumArray.sorted { (aDic, bDic) -> Bool in return aDic.key < bDic.key } 

Para Swift 3, lo siguiente me ha funcionado y la syntax de Swift 2 no ha funcionado:

 // 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 

Swift 3 está clasificado (por: <)

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