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?
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.
vous pouvez ajouter de la manière suivante et changer Dictionary
en NSMutableDictionary
dict["key"] = "value"
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)
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]
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)
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)
Dans Swift, si vous utilisez NSDictionary, vous pouvez utiliser setValue
:
dict.setValue("value", forKey: "key")
É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.
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"
var dict = ["name": "Samira", "surname": "Sami"]
// Add a new enter code herekey with a value
dict["email"] = "[email protected]"
print(dict)
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!
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.
À 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)
Pour ajouter de nouveaux éléments, définissez simplement:
listParrameters["your parrameter"] = value