Mam prosty słownik, który jest zdefiniowany jako:
var dict : NSDictionary = [ 1 : "abc", 2 : "cde"]
Teraz chcę dodać element do tego słownika: 3 : "efg"
Jak mogę dołączyć 3 : "efg"
do tego istniejącego słownika?
Mam prosty słownik, który jest zdefiniowany jako:
var dict : NSDictionary = [ 1 : "abc", 2 : "cde"]
Teraz chcę dodać element do tego słownika: 3 : "efg"
Jak mogę dołączyć 3 : "efg"
do tego istniejącego słownika?
Odpowiedzi:
Używasz NSDictionary
. O ile z jakiegoś powodu nie potrzebujesz tego typu jawnie, zalecamy używanie słownika Swift.
Możesz przekazać słownik Swift do dowolnej funkcji oczekującej NSDictionary
bez dodatkowej pracy, ponieważ Dictionary<>
i NSDictionary
płynnie się ze sobą łączą. Zaletą natywnego sposobu szybkiego jest to, że słownik używa typów ogólnych, więc jeśli zdefiniujesz go Int
jako klucz i String
jako wartość, nie możesz omyłkowo użyć kluczy i wartości różnych typów. (Kompilator sprawdza typy w Twoim imieniu).
W oparciu o to, co widzę w twoim kodzie, twój słownik używa Int
jako klucza i String
wartości. Aby utworzyć instancję i dodać element w późniejszym czasie, możesz użyć tego kodu:
var dict = [1: "abc", 2: "cde"] // dict is of type Dictionary<Int, String>
dict[3] = "efg"
Jeśli później musisz przypisać ją do zmiennej NSDictionary
typu, po prostu wykonaj jawną rzutowanie:
let nsDict = dict as! NSDictionary
I, jak wspomniano wcześniej, jeśli chcesz przekazać ją do funkcji oczekującej NSDictionary
, przekaż ją taką, jaka jest, bez rzutowania ani konwersji.
Dictionary
obiektem, a następnie przekształcania go NSDictionary
na końcu, jeśli zajdzie taka potrzeba. Wspaniale. Dzięki.
możesz dodać w następujący sposób i zmienić Dictionary
naNSMutableDictionary
dict["key"] = "value"
Cannot assign to the result of this expression
dict["testval"] = "test"
.. Błądfatal error: unexpectedly found nil while unwrapping an Optional value
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)
Twój słownik zawiera:
słownik [1: Hola, 2: Hello, 3: Aloha]
dictionary[1] = "Hola"
?
Jeśli słownik jest Int
, aby String
można zrobić po prostu:
dict[3] = "efg"
Jeśli chodzi o dodanie elementów do wartości słownika, możliwe rozwiązanie:
var dict = Dictionary<String, Array<Int>>()
dict["key"]! += [1]
dict["key"]!.append(1)
dict["key"]?.append(1)
W Swift, jeśli używasz NSDictionary , możesz użyć setValue
:
dict.setValue("value", forKey: "key")
Biorąc pod uwagę dwa słowniki, jak poniżej:
var dic1 = ["a": 1, "c": 2]
var dic2 = ["e": 3, "f": 4]
Oto jak możesz dodać wszystkie elementy z dic2 do dic1 :
dic2.map {
dic1[$0.0] = $0.1
}
Pozdrawiam A.
.forEach
zamiast, .map
ponieważ nie potrzebujemy żadnej odwzorowanej tablicy
Dict.updateValue
aktualizuje wartość istniejącego klucza ze słownika lub dodaje nową nową parę klucz-wartość, jeśli klucz nie istnieje.
Przykład-
var caseStatusParams: [String: AnyObject] = ["userId" : UserDefault.userID ]
caseStatusParams.updateValue("Hello" as AnyObject, forKey: "otherNotes")
Wynik-
▿ : 2 elements
- key : "userId"
- value : 866
▿ : 2 elements
- key : "otherNotes"
- value : "Hello"
Dla stypendystów używających [String:Any]
zamiast Dictionary
niżej jest to rozszerzenie
extension Dictionary where Key == String, Value == Any {
mutating func append(anotherDict:[String:Any]) {
for (key, value) in anotherDict {
self.updateValue(value, forKey: key)
}
}
}
Począwszy od wersji Swift 5, działa następująca kolekcja kodów.
// 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)
Nie ma funkcji dodawania danych do słownika. Po prostu przypisujesz wartość do nowego klucza w istniejącym słowniku. automatycznie doda wartość do słownika.
var param = ["Name":"Aloha","user" : "Aloha 2"]
param["questions"] = "Are you mine?"
print(param)
Wynik będzie podobny
[„Imię”: „Aloha”, „użytkownik”: „Aloha 2”, „pytania”: „„ Czy jesteś mój ”?]]
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)
Do tej pory najlepszym sposobem na dołączenie danych do słownika jest użycie jednej z funkcji Swift wyższego rzędu, tj. „Zmniejszanie”. Wykonaj poniższy fragment kodu:
newDictionary = oldDictionary.reduce(*newDictionary*) { r, e in var r = r; r[e.0] = e.1; return r }
@ Dharmesh W twoim przypadku będzie to
newDictionary = dict.reduce([3 : "efg"]) { r, e in var r = r; r[e.0] = e.1; return r }
Daj mi znać, jeśli znajdziesz jakiekolwiek problemy z używaniem powyższej składni.
Swift 5 happy kodowania
var tempDicData = NSMutableDictionary()
for temp in answerList {
tempDicData.setValue("your value", forKey: "your key")
}
Dodałem rozszerzenie słownika
extension Dictionary {
func cloneWith(_ dict: [Key: Value]) -> [Key: Value] {
var result = self
dict.forEach { key, value in result[key] = value }
return result
}
}
możesz użyć w cloneWith
ten sposób
newDictionary = dict.reduce([3 : "efg"]) { r, e in r.cloneWith(e) }
jeśli chcesz zmodyfikować lub zaktualizować NSDictionary, to przede wszystkim wpisz go jako NSMutableDictionary
let newdictionary = NSDictionary as NSMutableDictionary
następnie po prostu użyj
newdictionary.setValue(value: AnyObject?, forKey: String)