web-dev-qa-db-fra.com

Comment ajouter des éléments dans un dictionnaire dans Swift?

J'ai un dictionnaire simple qui est défini comme:

var dict : NSDictionary = [ 1 : "abc", 2 : "cde"]

Maintenant, je veux ajouter un élément dans ce dictionnaire: 3 : "efg"

Comment puis-je ajouter 3 : "efg" dans ce dictionnaire existant?

178
Dharmesh

Vous utilisez NSDictionary. À moins que vous n'ayez explicitement besoin de ce type pour une raison quelconque, je vous recommande d'utiliser un dictionnaire Swift.

Vous pouvez transmettre un dictionnaire Swift à toute fonction attendant NSDictionary sans aucun travail supplémentaire, car Dictionary<> et NSDictionary se relient de manière transparente. L'avantage de la méthode native Swift est que le dictionnaire utilise des types génériques. Par conséquent, si vous le définissez avec Int en tant que clé et String en tant que valeur, vous ne pouvez pas utiliser des clés par erreur. et des valeurs de différents types. (Le compilateur vérifie les types en votre nom.)

D'après ce que je vois dans votre code, votre dictionnaire utilise Int comme clé et String comme valeur. Pour créer une instance et ajouter un élément ultérieurement, vous pouvez utiliser ce code:

var dict = [1: "abc", 2: "cde"] // dict is of type Dictionary<Int, String>
dict[3] = "efg"

Si vous devez ensuite l'affecter à une variable de type NSDictionary, effectuez simplement une conversion explicite:

let nsDict = dict as! NSDictionary

Et, comme mentionné précédemment, si vous souhaitez le transmettre à une fonction qui attend NSDictionary, transmettez-le tel quel, sans conversion ni conversion.

203
Antonio

vous pouvez ajouter de la manière suivante et changer Dictionary en NSMutableDictionary

dict["key"] = "value"
96
yashwanth77

Je sais que cela peut arriver très tard, mais cela peut être utile à quelqu'un. Vous pouvez donc utiliser la méthode pdateValue (valeur:, forKey:) comme suit pour ajouter des paires valeur/clé aux dictionnaires de Swift:

var dict = [ 1 : "abc", 2 : "cde"]
dict.updateValue("efg", forKey: 3)
print(dict)
62
HeadOnn

Swift 3 - XCODE 8.1

var dictionary =  [Int:String]() 

dictionary.updateValue(value: "Hola", forKey: 1)
dictionary.updateValue(value: "Hello", forKey: 2)
dictionary.updateValue(value: "Aloha", forKey: 3)

Votre dictionnaire contient donc:

dictionnaire [1: Hola, 2: Bonjour, 3: Aloha]

41
Cristian Mora

Swift 3 +

Exemple pour affecter de nouvelles valeurs à Dictionnaire. Vous devez le déclarer comme NSMutableDictionary:

var myDictionary: NSMutableDictionary = [:]
let newValue = 1
myDictionary["newKey"] = newValue
print(myDictionary)
16
Dasoga

Si votre dictionnaire est Int à String, vous pouvez faire simplement:

dict[3] = "efg"

Si vous voulez dire ajouter des éléments à la valeur du dictionnaire, une solution possible:

var dict = Dictionary<String, Array<Int>>()

dict["key"]! += [1]
dict["key"]!.append(1)
dict["key"]?.append(1)
16
Alex Gidan

Dans Swift, si vous utilisez NSDictionary, vous pouvez utiliser setValue:

dict.setValue("value", forKey: "key")
12
lojals

Étant donné deux dictionnaires comme ci-dessous:

var dic1 = ["a": 1, "c": 2]
var dic2 = ["e": 3, "f": 4]

Voici comment vous pouvez ajouter tous les éléments de dic2 à dic1:

dic2.map {
   dic1[$0.0] = $0.1
}

A bientôt A.

9
Amin Tavassolian

Dict.updateValue met à jour la valeur de la clé existante à partir du dictionnaire ou ajoute une nouvelle paire clé-valeur si la clé n'existe pas.

Exemple-

var caseStatusParams: [String: AnyObject] = ["userId" : UserDefault.userID ]
caseStatusParams.updateValue("Hello" as AnyObject, forKey: "otherNotes")

Résultat-

▿  : 2 elements
    - key : "userId"
    - value : 866
▿  : 2 elements
    - key : "otherNotes"
    - value : "Hello"
8
Varsha Gaikwad
var dict = ["name": "Samira", "surname": "Sami"]
// Add a new enter code herekey with a value
dict["email"] = "[email protected]"
print(dict)
2
Queen Semiramis

Pour les boursiers qui utilisent [String:Any] au lieu de Dictionary, l'extension est indiquée ci-dessous.

extension Dictionary where Key == String, Value == Any {

    mutating func append(anotherDict:[String:Any]) {
        for (key, value) in anotherDict {
            self.updateValue(value, forKey: key)
        }
    }
}

Bonne annexe!

2
Dhaval H. Nena

Jusqu'à présent, la meilleure façon que j'ai trouvée d'ajouter des données à un dictionnaire en utilisant l'une des fonctions d'ordre supérieur de Swift, c'est-à-dire "réduire". Suivez l'extrait de code ci-dessous:

newDictionary = oldDictionary.reduce(*newDictionary*) { r, e in var r = r; r[e.0] = e.1; return r }

@ Dharmesh Dans votre cas, ce sera,

newDictionary = dict.reduce([3 : "efg"]) { r, e in var r = r; r[e.0] = e.1; return r }

S'il vous plaît laissez-moi savoir si vous rencontrez des problèmes dans l'utilisation de la syntaxe ci-dessus.

1
Shobhit C

À partir de Swift 5, la collection de codes suivante fonctionne.

 // main dict to start with
 var myDict : Dictionary = [ 1 : "abc", 2 : "cde"]

 // dict(s) to be added to main dict
 let myDictToMergeWith : Dictionary = [ 5 : "l m n"]
 let myDictUpdated : Dictionary = [ 5 : "lmn"]
 let myDictToBeMapped : Dictionary = [ 6 : "opq"]

 myDict[3]="fgh"
 myDict.updateValue("ijk", forKey: 4)

 myDict.merge(myDictToMergeWith){(current, _) in current}
 print(myDict)

 myDict.merge(myDictUpdated){(_, new) in new}
 print(myDict)

 myDictToBeMapped.map {
     myDict[$0.0] = $0.1
 }
 print(myDict)
1
Lord Anubis

Pour ajouter de nouveaux éléments, définissez simplement:

listParrameters["your parrameter"] = value
0
Tung Tran