Ben gibi tanımlanmış basit bir Sözlük var:
var dict : NSDictionary = [ 1 : "abc", 2 : "cde"]
Şimdi bu sözlüğe bir eleman eklemek istiyorum: 3 : "efg"
3 : "efg"
Bu mevcut sözlüğe nasıl ekleyebilirim ?
Ben gibi tanımlanmış basit bir Sözlük var:
var dict : NSDictionary = [ 1 : "abc", 2 : "cde"]
Şimdi bu sözlüğe bir eleman eklemek istiyorum: 3 : "efg"
3 : "efg"
Bu mevcut sözlüğe nasıl ekleyebilirim ?
Yanıtlar:
Kullanıyorsunuz NSDictionary
. Herhangi bir nedenden ötürü açıkça bu tür olması gerekmedikçe, bir Swift sözlüğü kullanmanızı öneririm.
Sen bekliyor herhangi işleve bir Swift sözlüğü geçebilir NSDictionary
, çünkü fazladan bir şey yapmadan Dictionary<>
ve NSDictionary
sorunsuz birbirlerine köprü. Yerel Swift yolunun avantajı, sözlüğün genel türleri kullanmasıdır, bu nedenle Int
anahtar String
olarak ve değer olarak tanımlarsanız , yanlışlıkla farklı türlerdeki anahtarları ve değerleri kullanamazsınız. (Derleyici sizin adınıza türleri kontrol eder.)
Kodunuzda gördüklerime dayanarak, sözlüğünüz Int
anahtar ve String
değer olarak kullanır . Bir örnek oluşturmak ve daha sonra bir öğe eklemek için bu kodu kullanabilirsiniz:
var dict = [1: "abc", 2: "cde"] // dict is of type Dictionary<Int, String>
dict[3] = "efg"
Daha sonra bunu bir tür değişkenine atamanız gerekirse NSDictionary
, sadece açık bir döküm yapın:
let nsDict = dict as! NSDictionary
Ve daha önce de belirtildiği gibi, onu beklediğiniz bir işleve NSDictionary
geçirmek istiyorsanız, herhangi bir döküm veya dönüştürme olmadan olduğu gibi geçirin.
Dictionary
nesneyi oluşturmak ve manipüle etmek için Swift'in rahatlığından yararlanın ve sonra NSDictionary
gerekiyorsa sonunda dönüştürün . Olağanüstü. Teşekkürler.
Aşağıdaki şekilde ve değişim kullanarak ekleyebilir Dictionary
içinNSMutableDictionary
dict["key"] = "value"
Cannot assign to the result of this expression
dict["testval"] = "test"
.. Hatafatal error: unexpectedly found nil while unwrapping an Optional value
Bunun çok geç olabileceğini biliyorum, ama birisi için yararlı olabilir. Bu nedenle, anahtar kelimelere anahtar değer çiftlerini hızlı bir şekilde eklemek için updateValue (value:, forKey:) yöntemini aşağıdaki gibi kullanabilirsiniz:
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)
Yani, sözlüğünüz şunları içerir:
sözlük [1: Hola, 2: Merhaba, 3: Aloha]
dictionary[1] = "Hola"
?
Sözlüğünü ise Int
hiç String
basitçe yapabilirsiniz:
dict[3] = "efg"
Sözlük değerine eleman eklemek istiyorsanız , olası bir çözüm:
var dict = Dictionary<String, Array<Int>>()
dict["key"]! += [1]
dict["key"]!.append(1)
dict["key"]?.append(1)
Swift'te NSDictionary kullanıyorsanız şunları kullanabilirsiniz setValue
:
dict.setValue("value", forKey: "key")
Aşağıdaki gibi iki sözlük verilmiştir:
var dic1 = ["a": 1, "c": 2]
var dic2 = ["e": 3, "f": 4]
Burada tüm öğeleri ekleyebilir nasıl dic2 için dic1 :
dic2.map {
dic1[$0.0] = $0.1
}
Şerefe A.
.forEach
yerine .map
herhangi dönüş eşleştirilmiş dizi gerekmez olarak
Dict.updateValue
varolan anahtarın değerini sözlükten günceller veya anahtar yoksa yeni yeni anahtar / değer çifti ekler.
Misal-
var caseStatusParams: [String: AnyObject] = ["userId" : UserDefault.userID ]
caseStatusParams.updateValue("Hello" as AnyObject, forKey: "otherNotes")
Sonuç-
▿ : 2 elements
- key : "userId"
- value : 866
▿ : 2 elements
- key : "otherNotes"
- value : "Hello"
Aşağıdaki [String:Any]
yerine kullanan öğrenciler Dictionary
için uzantısı
extension Dictionary where Key == String, Value == Any {
mutating func append(anotherDict:[String:Any]) {
for (key, value) in anotherDict {
self.updateValue(value, forKey: key)
}
}
}
Swift 5 itibariyle, aşağıdaki kod koleksiyonu çalışır.
// 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)
Sözlüğe veri ekleme işlevi yoktur. Değeri varolan sözlükte yeni anahtara atamanız yeterlidir. sözlüğe otomatik olarak değer katacaktır.
var param = ["Name":"Aloha","user" : "Aloha 2"]
param["questions"] = "Are you mine?"
print(param)
Çıktı gibi olacak
["Ad": "Aloha", "kullanıcı": "Aloha 2", "sorular": "" Sen benim misin? "]
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)
Şimdiye kadar en iyi yolu Swift sözde veri azaltmak için bulduk bulduk üst düzey işlevlerinden biri Swift yani "azaltmak". Aşağıdaki kod snippet'ini izleyin:
newDictionary = oldDictionary.reduce(*newDictionary*) { r, e in var r = r; r[e.0] = e.1; return r }
@ Dharmesh Sizin durumunuzda,
newDictionary = dict.reduce([3 : "efg"]) { r, e in var r = r; r[e.0] = e.1; return r }
Yukarıdaki sözdizimini kullanırken herhangi bir sorun bulursanız lütfen bize bildirin.
Swift 5 mutlu kodlama
var tempDicData = NSMutableDictionary()
for temp in answerList {
tempDicData.setValue("your value", forKey: "your key")
}
Sözlük uzantısı ekledim
extension Dictionary {
func cloneWith(_ dict: [Key: Value]) -> [Key: Value] {
var result = self
dict.forEach { key, value in result[key] = value }
return result
}
}
Kullanabileceğiniz cloneWith
böyle
newDictionary = dict.reduce([3 : "efg"]) { r, e in r.cloneWith(e) }
NSDictionary değiştirmek veya güncellemek istiyorsanız, önce NSMutableDictionary olarak yazın
let newdictionary = NSDictionary as NSMutableDictionary
o zaman kullan
newdictionary.setValue(value: AnyObject?, forKey: String)