Eu tenho um Dictionary
em Swift e gostaria de obter uma chave em um índice específico.
var myDict : Dictionary<String,MyClass> = Dictionary<String,MyClass>()
Eu sei que posso iterar nas chaves e registrá-las
for key in myDict.keys{
NSLog("key = \(key)")
}
No entanto, estranhamente, algo assim não é possível
var key : String = myDict.keys[0]
Por quê ?
ios
dictionary
swift
the_critic
fonte
fonte
Respostas:
Isso ocorre porque
keys
retornaLazyMapCollection<[Key : Value], Key>
, que não pode ser subscrito por umInt
. Uma maneira de lidar com isso é avançar o dicionáriostartIndex
pelo número inteiro que você deseja subscrever, por exemplo:Outra solução possível seria inicializar uma matriz com
keys
como entrada, então você pode usar subscritos inteiros no resultado:Lembre-se de que os dicionários são inerentemente desordenados, então não espere que a chave em um determinado índice seja sempre a mesma.
fonte
Array(myDict)[0].0
já que ele não copiaria o array keys e não deveria copiar as estruturas internas do dicionário, embora pudesse.myDict[keysArray[0]]
.'NSDictionary' is not convertible to '_ArrayBuffer<T>'
Swift 3:
Array()
pode ser útil para fazer isso.Obtenha a chave:
Obter valor :
fonte
["a": 1, "b": 2]
, pode ser transformado em uma série de dicionários como[[key: "a", value: 1], [key: "b", value: 2]]
, este pode então ser acessado por índice.Aqui está uma pequena extensão para acessar chaves e valores no dicionário por índice:
fonte
Você pode iterar em um dicionário e pegar um índice com for-in e enumerar (como outros disseram, não há garantia de que sairá ordenado como abaixo)
Se você quiser classificar primeiro ..
em seguida, itere.
Se você deseja criar um dicionário ordenado, deve procurar Genéricos.
fonte
dict.enumerated().forEach { (index, element) in ... }
De https://developer.apple.com/library/prerelease/ios/documentation/swift/conceptual/swift_programming_language/CollectionTypes.html :
Se você precisar usar as chaves ou valores de um dicionário com uma API que usa uma instância de Array, inicialize uma nova matriz com a propriedade keys ou values:
fonte
SWIFT 3. Exemplo para o primeiro elemento
fonte
No Swift 3, tente usar este código para obter o par de valores-chave (tupla) em determinado índice:
fonte
Aqui está um exemplo, usando Swift 1.2
fonte
SWIFT 4
Um pouco fora do tópico: mas aqui está se você tiver uma matriz de dicionários, por exemplo: [[String: String]]
fonte
Eu estava procurando por algo como um LinkedHashMap em Java. Nem o Swift nem o Objective-C têm um, se não me engano.
Meu pensamento inicial foi envolver meu dicionário em um Array.
[[String: UIImage]]
mas então percebi que pegar a chave do dicionário era uma loucura,Array(dict)[index].key
então optei por Tuplas. Agora meu array está assim,[(String, UIImage)]
então posso recuperá-lo portuple.0
. Chega de convertê-lo em um Array. Apenas meus 2 centavos.fonte