Tengo un Dictionary
Swift y me gustaría obtener una clave en un índice específico.
var myDict : Dictionary<String,MyClass> = Dictionary<String,MyClass>()
Sé que puedo iterar sobre las claves y registrarlas
for key in myDict.keys{
NSLog("key = \(key)")
}
Sin embargo, curiosamente, algo como esto no es posible.
var key : String = myDict.keys[0]
Por qué ?
ios
dictionary
swift
el crítico
fuente
fuente
Respuestas:
Eso es porque las
keys
devolucionesLazyMapCollection<[Key : Value], Key>
, que no se pueden suscribir con unInt
. Una forma de manejar esto es avanzar el diccionariostartIndex
por el número entero que desea subíndice, por ejemplo:Otra posible solución sería inicializar una matriz con
keys
como entrada, luego puede usar subíndices enteros en el resultado:Recuerde, los diccionarios están inherentemente desordenados, así que no espere que la clave en un índice dado sea siempre la misma.
fuente
Array(myDict)[0].0
ya que no copiaría la matriz de claves, y no debería copiar las estructuras internas del diccionario, aunque podría hacerlo.myDict[keysArray[0]]
.'NSDictionary' is not convertible to '_ArrayBuffer<T>'
Swift 3:
Array()
puede ser útil para hacer esto.Obtener la clave :
Obtener valor:
fuente
["a": 1, "b": 2]
, se puede convertir en una serie de diccionarios como[[key: "a", value: 1], [key: "b", value: 2]]
, esto luego se puede acceder por índice.Aquí hay una pequeña extensión para acceder a claves y valores en el diccionario por índice:
fuente
Puede iterar sobre un diccionario y tomar un índice con for-in y enumerar (como han dicho otros, no hay garantía de que saldrá ordenado como se muestra a continuación)
Si desea ordenar primero ...
luego iterar.
Si desea crear un diccionario ordenado, debe buscar en Genéricos.
fuente
dict.enumerated().forEach { (index, element) in ... }
De https://developer.apple.com/library/prerelease/ios/documentation/swift/conceptual/swift_programming_language/CollectionTypes.html :
Si necesita usar claves o valores de un diccionario con una API que toma una instancia de Array, inicialice una nueva matriz con la propiedad de claves o valores:
fuente
SWIFT 3. Ejemplo para el primer elemento
fuente
En Swift 3, intente usar este código para obtener el par clave-valor (tupla) en el índice dado:
fuente
Aquí hay un ejemplo, usando Swift 1.2
fuente
SWIFT 4
Un poco fuera de tema: pero aquí está si tiene una matriz de diccionarios, es decir: [[String: String]]
fuente
Estaba buscando algo como LinkedHashMap en Java. Ni Swift ni Objective-C tienen uno si no me equivoco.
Mi pensamiento inicial fue envolver mi diccionario en una matriz.
[[String: UIImage]]
pero luego me di cuenta de que agarrar la clave del diccionario era una locura,Array(dict)[index].key
así que fui con Tuples. Ahora mi matriz se ve[(String, UIImage)]
así que puedo recuperarlatuple.0
. No más convertirlo en una matriz. Solo mis 2 centavos.fuente