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.
Probé muchas soluciones en SO pero ninguna funcionó para mí. Estoy usando XCode6 Beta 5 y en él algunos dan errores de compilación y algunas soluciones dan excepciones. Cualquiera que pueda publicar la copia de trabajo de la 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 contiene únicamente claves, mientras que los valores deben recuperarse del diccionario original. Sin embargo, 'Dictionary'
también es un 'CollectionType'
conjunto de pares (clave, valor) y podemos usar la 'sorted'
función global para obtener una matriz ordenada que contenga claves y valores, como esta:
let sortedKeysAndValues = sorted(dictionary) { $0.0 < $1.0 }
print(sortedKeysAndValues) // [(A, [1, 2]), (D, [5, 6]), (Z, [3, 4])]
EDIT2: La sintaxis Swift que cambia mensualmente actualmente prefiere
let sortedKeys = Array(dictionary.keys).sort(<) // ["A", "D", "Z"]
El global sorted
está en desuso.
Para ser claros, no puedes ordenar diccionarios. Pero puedes superar una matriz, que se puede ordenar.
Rápido 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)") //
veloz 3
wordDict.sorted(by: { $0.0 < $1.0 })
En Swift 5 , para ordenar el diccionario por TECLAS
let sortedYourArray = YOURDICTIONARY.sorted( by: { $0.0 < $1.0 })
Para ordenar el Diccionario por VALORES
let sortedYourArray = YOURDICTIONARY.sorted( by: { $0.1 < $1.1 })