J'ai un dictionnaire simple qui se définit 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"à ce dictionnaire existant?
J'ai un dictionnaire simple qui se définit 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"à ce dictionnaire existant?
Réponses:
Vous utilisez NSDictionary. À moins que vous n'en ayez explicitement besoin pour ce type de raison, je vous recommande d'utiliser un dictionnaire Swift.
Vous pouvez passer un dictionnaire Swift à n'importe quelle fonction attend NSDictionarysans aucun travail supplémentaire, car Dictionary<>et en NSDictionarytoute transparence les uns aux autres. L'avantage de la méthode Swift native est que le dictionnaire utilise des types génériques, donc si vous le définissez avec Intcomme clé et Stringcomme valeur, vous ne pouvez pas utiliser par erreur des clés et des valeurs de différents types. (Le compilateur vérifie les types en votre nom.)
En fonction de ce que je vois dans votre code, votre dictionnaire utilise Intcomme clé et Stringcomme 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 NSDictionarytype, faites simplement un cast explicite:
let nsDict = dict as! NSDictionary
Et, comme mentionné précédemment, si vous voulez le passer à une fonction attendue NSDictionary, passez-le tel quel sans conversion ni conversion.
Dictionaryobjet, puis le convertir NSDictionaryà la fin si vous en avez besoin. Merveilleux. Merci.
vous pouvez ajouter en utilisant la manière suivante et passer DictionaryàNSMutableDictionary
dict["key"] = "value"
Cannot assign to the result of this expression
dict["testval"] = "test".. Erreurfatal error: unexpectedly found nil while unwrapping an Optional value
Je sais que cela pourrait arriver très tard, mais cela pourrait s'avérer utile pour quelqu'un. Ainsi, pour ajouter des paires clé-valeur aux dictionnaires dans swift, vous pouvez utiliser la méthode updateValue (value:, forKey:) comme suit:
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)
Ainsi, votre dictionnaire contient:
dictionnaire [1: Hola, 2: Bonjour, 3: Aloha]
dictionary[1] = "Hola"?
Si votre dictionnaire est Intpour Stringvous, vous pouvez faire simplement:
dict[3] = "efg"
Si vous voulez 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 ajouter tous les éléments de dic2 à dic1 :
dic2.map {
dic1[$0.0] = $0.1
}
À la vôtre A.
.forEachau lieu de .mapcar nous n'avons pas besoin de tableau mappé de retour
Dict.updateValue met à jour la valeur de la clé existante à partir du dictionnaire ou ajoute une nouvelle 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"
Pour les boursiers utilisant [String:Any]au lieu de Dictionaryci-dessous l'extension
extension Dictionary where Key == String, Value == Any {
mutating func append(anotherDict:[String:Any]) {
for (key, value) in anotherDict {
self.updateValue(value, forKey: key)
}
}
}
Depuis 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)
Il n'y a pas de fonction pour ajouter les données dans le dictionnaire. Vous attribuez simplement la valeur à une nouvelle clé dans le dictionnaire existant. il ajoutera automatiquement de la valeur au dictionnaire.
var param = ["Name":"Aloha","user" : "Aloha 2"]
param["questions"] = "Are you mine?"
print(param)
La sortie sera comme
["Nom": "Aloha", "utilisateur": "Aloha 2", "questions": "" Êtes-vous à moi "?"]
For whoever reading this for swift 5.1+
// 1. Using updateValue to update the given key or add new if doesn't exist
var dictionary = [Int:String]()
dictionary.updateValue("egf", forKey: 3)
// 2. Using a dictionary[key]
var dictionary = [Int:String]()
dictionary[key] = "value"
// 3. Using subscript and mutating append for the value
var dictionary = [Int:[String]]()
dictionary[key, default: ["val"]].append("value")
var dict = ["name": "Samira", "surname": "Sami"]
// Add a new enter code herekey with a value
dict["email"] = "sample@email.com"
print(dict)
Jusqu'à présent, le meilleur moyen que j'ai trouvé pour 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 }
Veuillez me faire savoir si vous rencontrez des problèmes lors de l'utilisation de la syntaxe ci-dessus.
Swift 5 Happy Coding
var tempDicData = NSMutableDictionary()
for temp in answerList {
tempDicData.setValue("your value", forKey: "your key")
}
J'ai ajouté l'extension Dictionary
extension Dictionary {
func cloneWith(_ dict: [Key: Value]) -> [Key: Value] {
var result = self
dict.forEach { key, value in result[key] = value }
return result
}
}
vous pouvez utiliser cloneWithcomme ça
newDictionary = dict.reduce([3 : "efg"]) { r, e in r.cloneWith(e) }
si vous souhaitez modifier ou mettre à jour NSDictionary, commencez par le transcrire en NSMutableDictionary
let newdictionary = NSDictionary as NSMutableDictionary
puis utilisez simplement
newdictionary.setValue(value: AnyObject?, forKey: String)