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 NSDictionary
sans aucun travail supplémentaire, car Dictionary<>
et en NSDictionary
toute 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 Int
comme clé et String
comme 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 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 NSDictionary
type, 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.
Dictionary
objet, 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 Int
pour String
vous, 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.
.forEach
au lieu de .map
car 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 Dictionary
ci-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 cloneWith
comme ç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)