Je souhaite convertir mon dictionnaire en tableau, en affichant chaque [String : Int]
du dictionnaire sous forme de chaîne dans le tableau.
Par exemple:
var myDict: [String : Int] = ["attack" : 1, "defend" : 5, "block" : 12]
Je suis conscient de myDict.keys.array
et myDict.values.array
, mais je veux qu'ils apparaissent ensemble dans un tableau. Voici ce que je veux dire:
var myDictConvertedToArray = ["attack 1", "defend 5", "block 12"]
Merci d'avance.
Vous pouvez utiliser une boucle for pour parcourir les paires clé/valeur du dictionnaire pour construire votre tableau:
var myDict: [String : Int] = ["attack" : 1, "defend" : 5, "block" : 12]
var arr = [String]()
for (key, value) in myDict {
arr.append("\(key) \(value)")
}
Remarque: Les dictionnaires sont non ordonnés , donc l'ordre de votre tableau peut ne pas être celui que vous attendez.
Dans Swift 2 et versions ultérieures, cela peut également être fait avec map
:
let arr = myDict.map { "\($0) \($1)" }
Cela peut également s'écrire:
let arr = myDict.map { "\($0.key) \($0.value)" }
ce qui est plus clair sinon aussi court.
Le cas général de la création d'un tableau à partir de ONLY VALUES d'un dictionnaire dans Swift 3 est (je suppose que cela fonctionne également dans les anciennes versions de Swift):
let arrayFromDic = Array(dic.values.map{ $0 })
Exemple:
let dic = ["1":"a", "2":"b","3":"c"]
let ps = Array(dic.values.map{ $0 })
print("\(ps)")
for p in ps {
print("\(p)")
}
Si vous aimez le code concis et préférez une approche fonctionnelle, vous pouvez utiliser la méthode map
exécutée sur la collection de clés:
let array = Array(myDict.keys.map { "\($0) \(myDict[$0]!)" })
ou, comme suggéré par @vacawama:
let array = myDict.keys.array.map { "\($0) \(myDict[$0]!)" }
qui est fonctionnellement équivalent
Vous devrez parcourir et construire vous-même un nouveau tableau à partir des clés et des valeurs.
Jetez un œil à 's Swift array :
Vous pouvez ajouter un nouvel élément à la fin d'un tableau en appelant la méthode append (_ :) du tableau:
Essaye ça:
var myDict:[String : Int] = ["attack" : 1, "defend" : 5, "block" : 12]
var dictArray: [String] = []
for (k, v) in myDict {
dictArray.append("\(k) \(v)")
}
Jetez un œil à Quelle est la manière la plus propre d'appliquer map () à un dictionnaire dans Swift? si vous utilisez Swift 2.0: