Quero classificar um dicionário no Swift. Eu tenho um dicionário como:
"A" => Array[]
"Z" => Array[]
"D" => Array[]
etc Eu quero que seja
"A" => Array[]
"D" => Array[]
"Z" => Array[]
etc.
Eu tentei muitas soluções em SO, mas ninguém trabalhou para mim. Estou usando o XCode6 Beta 5 e nele alguns estão dando erro de compilador e algumas soluções estão dando exceções. Portanto, qualquer pessoa que possa postar a cópia de trabalho da classificação do dicionário.
swift
sorting
dictionary
Aleem Ahmad
fonte
fonte
sortedKeys
função.Respostas:
EDITAR:
A matriz classificada do código acima contém apenas chaves, enquanto os valores precisam ser recuperados do dicionário original. No entanto,
'Dictionary'
também é um'CollectionType'
dos pares (chave, valor) e podemos usar a'sorted'
função global para obter uma matriz classificada contendo chaves e valores, assim:EDIT2: a mudança mensal da sintaxe Swift atualmente prefere
O global
sorted
está obsoleto.fonte
let sortedKeys = dictionary.keys.sorted()
Swift 2.0
Versão atualizada da resposta de Ivica M:
Swift 3
Aviso prévio:
Não se surpreenda que o tipo resultante seja uma matriz e não um dicionário. Os dicionários não podem ser classificados ! O tipo de dados resultante é uma matriz classificada, exatamente como na resposta da @ Ivica.
fonte
Binary operator > can not be compared to two
qualquer operando. O downcasting também não funciona #Se você deseja iterar sobre as chaves e os valores em uma ordem de chave, este formulário é bastante sucinto
fonte
sort
esorted
. Swift 2:sort
tornou-sesortInPlace
esorted
tornou-sesort
.No swift 4, você pode escrevê-lo de maneira mais inteligente:
fonte
Eu tentei todas as opções acima, em poucas palavras, tudo o que você precisa é
fonte
Para o Swift 4, o seguinte funcionou para mim:
fonte
Esta é uma alternativa elegante para classificar o próprio dicionário:
A partir dos Swift 4 e 5
fonte
No Swift 5 , para classificar Dictionary by KEYS
Para classificar Dicionário por VALUES
fonte
Para o Swift 3, a seguinte classificação retorna o dicionário classificado por chaves:
fonte
"classificado" no iOS 9 e xcode 7.3, o swift 2.2 é impossível, altere "classificado" para "classificar", assim:
fonte
Array
deTuples
, não umDictionary
Swift 5
Insira o seu dicionário que você deseja classificar em ordem alfabética por teclas.
dict.sorted (por: {$ 0.key <$ 1.key}) por si próprio retorna uma tupla (valor, valor) em vez de um dicionário [valor: valor]. Assim, o loop for analisa a tupla para retornar como um dicionário. Dessa forma, você coloca um dicionário e recebe um dicionário de volta.
fonte
Swift 4 e 5
Para classificação de chaves de cadeia:
Exemplo:
fonte
Para o Swift 3, o seguinte funcionou para mim e a sintaxe do Swift 2 não funcionou:
fonte
sortedDict
? O que émenu
? Este código também não parece ser válido.Swift 3 é classificado (por: <)
fonte