Ho un dizionario semplice che è definito come:
var dict : NSDictionary = [ 1 : "abc", 2 : "cde"]
Ora voglio aggiungere un elemento in questo dizionario: 3 : "efg"
Come posso aggiungere 3 : "efg"
in questo dizionario esistente?
Ho un dizionario semplice che è definito come:
var dict : NSDictionary = [ 1 : "abc", 2 : "cde"]
Ora voglio aggiungere un elemento in questo dizionario: 3 : "efg"
Come posso aggiungere 3 : "efg"
in questo dizionario esistente?
Risposte:
Stai usando NSDictionary
. A meno che tu non abbia esplicitamente bisogno che sia quel tipo per qualche motivo, ti consiglio di usare un dizionario Swift.
È possibile passare un dizionario Swift a qualsiasi funzione che si aspetta NSDictionary
, senza alcun lavoro supplementare, perché Dictionary<>
e NSDictionary
senza soluzione di continuità colmare gli uni agli altri. Il vantaggio del modo Swift nativo è che il dizionario utilizza tipi generici, quindi se lo si definisce Int
come chiave e String
come valore, non è possibile utilizzare erroneamente chiavi e valori di tipi diversi. (Il compilatore controlla i tipi per tuo conto.)
Sulla base di ciò che vedo nel tuo codice, il tuo dizionario utilizza Int
come chiave e String
come valore. Per creare un'istanza e aggiungere un elemento in un secondo momento è possibile utilizzare questo codice:
var dict = [1: "abc", 2: "cde"] // dict is of type Dictionary<Int, String>
dict[3] = "efg"
Se in seguito devi assegnarlo a una variabile di NSDictionary
tipo, esegui un cast esplicito:
let nsDict = dict as! NSDictionary
E, come accennato in precedenza, se si desidera passarlo a una funzione prevista NSDictionary
, passarlo così com'è senza alcun cast o conversione.
Dictionary
oggetto e convertirlo NSDictionary
alla fine, se necessario. Meraviglioso. Grazie.
puoi aggiungere usando il seguente modo e cambiare Dictionary
inNSMutableDictionary
dict["key"] = "value"
Cannot assign to the result of this expression
dict["testval"] = "test"
.. Errorefatal error: unexpectedly found nil while unwrapping an Optional value
So che potrebbe arrivare molto tardi, ma può rivelarsi utile a qualcuno. Quindi per aggiungere coppie di valori-chiave ai dizionari in swift, puoi usare il metodo updateValue (value:, forKey:) come segue:
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)
Quindi, il tuo dizionario contiene:
dizionario [1: Hola, 2: Hello, 3: Aloha]
dictionary[1] = "Hola"
?
Se il dizionario è Int
a String
che si può fare semplicemente:
dict[3] = "efg"
Se intendi aggiungere elementi al valore del dizionario una possibile soluzione:
var dict = Dictionary<String, Array<Int>>()
dict["key"]! += [1]
dict["key"]!.append(1)
dict["key"]?.append(1)
In Swift, se si utilizza NSDictionary , è possibile utilizzare setValue
:
dict.setValue("value", forKey: "key")
Dati due dizionari come di seguito:
var dic1 = ["a": 1, "c": 2]
var dic2 = ["e": 3, "f": 4]
Ecco come è possibile aggiungere tutti gli elementi da dic2 a dic1 :
dic2.map {
dic1[$0.0] = $0.1
}
Cin cin A.
.forEach
invece .map
che non abbiamo bisogno di alcun array mappato di ritorno
Dict.updateValue
aggiorna il valore per la chiave esistente dal dizionario o aggiunge una nuova nuova coppia chiave-valore se la chiave non esiste.
Esempio-
var caseStatusParams: [String: AnyObject] = ["userId" : UserDefault.userID ]
caseStatusParams.updateValue("Hello" as AnyObject, forKey: "otherNotes")
Risultato-
▿ : 2 elements
- key : "userId"
- value : 866
▿ : 2 elements
- key : "otherNotes"
- value : "Hello"
Per i borsisti usare [String:Any]
invece di Dictionary
sotto è l'estensione
extension Dictionary where Key == String, Value == Any {
mutating func append(anotherDict:[String:Any]) {
for (key, value) in anotherDict {
self.updateValue(value, forKey: key)
}
}
}
A partire da Swift 5, funziona la seguente raccolta di codici.
// 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)
Non è disponibile alcuna funzione per aggiungere i dati nel dizionario. Basta assegnare il valore alla nuova chiave nel dizionario esistente. aggiungerà automaticamente valore al dizionario.
var param = ["Name":"Aloha","user" : "Aloha 2"]
param["questions"] = "Are you mine?"
print(param)
L'output sarà simile
["Nome": "Aloha", "utente": "Aloha 2", "questions": "" Sei mio "?"]
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)
Fino ad ora il modo migliore che ho trovato per aggiungere dati a un dizionario utilizzando una delle funzioni di ordine superiore di Swift, ovvero "ridurre". Segui lo snippet di codice seguente:
newDictionary = oldDictionary.reduce(*newDictionary*) { r, e in var r = r; r[e.0] = e.1; return r }
@ Dharmesh Nel tuo caso, sarà,
newDictionary = dict.reduce([3 : "efg"]) { r, e in var r = r; r[e.0] = e.1; return r }
Per favore fatemi sapere se riscontri problemi nell'uso della sintassi sopra.
Swift 5 happy coding
var tempDicData = NSMutableDictionary()
for temp in answerList {
tempDicData.setValue("your value", forKey: "your key")
}
Ho aggiunto l'estensione del dizionario
extension Dictionary {
func cloneWith(_ dict: [Key: Value]) -> [Key: Value] {
var result = self
dict.forEach { key, value in result[key] = value }
return result
}
}
puoi usare cloneWith
così
newDictionary = dict.reduce([3 : "efg"]) { r, e in r.cloneWith(e) }
se si desidera modificare o aggiornare NSDictionary, prima di tutto digitarlo come NSMutableDictionary
let newdictionary = NSDictionary as NSMutableDictionary
quindi usa semplicemente
newdictionary.setValue(value: AnyObject?, forKey: String)