Ordenar diccionario por claves

Resuelto Aleem Ahmad asked hace 10 años • 16 respuestas

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.

Aleem Ahmad avatar Aug 19 '14 13:08 Aleem Ahmad
Aceptado
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 sortedestá en desuso.

Ivica M. avatar Aug 19 '2014 11:08 Ivica M.

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 })
Dan Beaulieu avatar Sep 03 '2015 19:09 Dan Beaulieu

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 })
Abdul Karim Khan avatar Feb 04 '2020 15:02 Abdul Karim Khan