J'ai un Dictionary
dans Swift et je voudrais obtenir une clé à un index spécifique.
var myDict : Dictionary<String,MyClass> = Dictionary<String,MyClass>()
Je sais que je peux parcourir les clés et les enregistrer
for key in myDict.keys{
NSLog("key = \(key)")
}
Cependant, curieusement, quelque chose comme ça n'est pas possible
var key : String = myDict.keys[0]
Pourquoi ?
ios
dictionary
swift
le_critique
la source
la source
Réponses:
C'est parce que les
keys
retoursLazyMapCollection<[Key : Value], Key>
, qui ne peuvent pas être indiqués avec unInt
. Une façon de gérer cela consiste à faire avancer le dictionnaire destartIndex
l'entier que vous vouliez indiquer, par exemple:Une autre solution possible serait d'initialiser un tableau avec
keys
comme entrée, vous pouvez alors utiliser des indices entiers sur le résultat:N'oubliez pas que les dictionnaires ne sont pas ordonnés par nature, alors ne vous attendez pas à ce que la clé d'un index donné soit toujours la même.
la source
Array(myDict)[0].0
car il ne copierait pas le tableau de clés et ne devrait pas copier les structures internes du dictionnaire, bien que cela puisse être le cas.myDict[keysArray[0]]
.'NSDictionary' is not convertible to '_ArrayBuffer<T>'
Swift 3:
Array()
peut être utile pour cela.Obtenir la clé :
Obtenez de la valeur:
la source
["a": 1, "b": 2]
, peut être transformé en un tableau de dictionnaires comme[[key: "a", value: 1], [key: "b", value: 2]]
, cela peut ensuite être consulté par index.Voici une petite extension pour accéder aux clés et valeurs dans le dictionnaire par index:
la source
Vous pouvez parcourir un dictionnaire et saisir un index avec for-in et énumérer (comme d'autres l'ont dit, il n'y a aucune garantie qu'il sortira dans l'ordre comme ci-dessous)
Si vous souhaitez effectuer le tri en premier.
puis itérer.
Si vous souhaitez créer un dictionnaire ordonné, vous devez vous pencher sur les génériques.
la source
dict.enumerated().forEach { (index, element) in ... }
Depuis https://developer.apple.com/library/prerelease/ios/documentation/swift/conceptual/swift_programming_language/CollectionTypes.html :
Si vous devez utiliser les clés ou les valeurs d'un dictionnaire avec une API qui prend une instance de Array, initialisez un nouveau tableau avec la propriété keys ou values:
la source
SWIFT 3. Exemple pour le premier élément
la source
Dans Swift 3, essayez d'utiliser ce code pour obtenir une paire clé-valeur (tuple) à un index donné:
la source
Voici un exemple, utilisant Swift 1.2
la source
SWIFT 4
Légèrement hors sujet: mais voici si vous avez un tableau de dictionnaires, c'est-à-dire: [[String: String]]
la source
Je cherchais quelque chose comme un LinkedHashMap en Java. Ni Swift ni Objective-C n'en ont un si je ne me trompe pas.
Ma première pensée était d'envelopper mon dictionnaire dans un tableau.
[[String: UIImage]]
mais ensuite j'ai réalisé que saisir la clé du dictionnaire était farfelu avecArray(dict)[index].key
donc je suis allé avec Tuples. Maintenant, mon tableau ressemble à[(String, UIImage)]
ce que je peux récupérer partuple.0
. Plus besoin de le convertir en un tableau. Juste mes 2 cents.la source