Saya memiliki Kamus sederhana yang didefinisikan seperti:
var dict : NSDictionary = [ 1 : "abc", 2 : "cde"]
Sekarang saya ingin menambahkan elemen ke dalam kamus ini: 3 : "efg"
Bagaimana saya bisa menambahkan 3 : "efg"
kamus ini?
Saya memiliki Kamus sederhana yang didefinisikan seperti:
var dict : NSDictionary = [ 1 : "abc", 2 : "cde"]
Sekarang saya ingin menambahkan elemen ke dalam kamus ini: 3 : "efg"
Bagaimana saya bisa menambahkan 3 : "efg"
kamus ini?
Jawaban:
Anda menggunakan NSDictionary
. Kecuali Anda secara eksplisit membutuhkan jenis itu untuk beberapa alasan, saya sarankan menggunakan kamus Swift.
Anda dapat meneruskan kamus Swift ke fungsi apa pun yang diharapkan NSDictionary
tanpa kerja ekstra, karena Dictionary<>
dan saling NSDictionary
terhubung dengan mulus. Keuntungan dari cara Swift asli adalah bahwa kamus menggunakan tipe generik, jadi jika Anda mendefinisikannya dengan Int
sebagai kunci dan String
sebagai nilainya, Anda tidak dapat secara keliru menggunakan kunci dan nilai dari tipe yang berbeda. (Kompiler memeriksa jenis atas nama Anda.)
Berdasarkan apa yang saya lihat dalam kode Anda, kamus Anda menggunakan Int
sebagai kunci dan String
sebagai nilai. Untuk membuat instance dan menambahkan item di lain waktu Anda dapat menggunakan kode ini:
var dict = [1: "abc", 2: "cde"] // dict is of type Dictionary<Int, String>
dict[3] = "efg"
Jika nanti Anda perlu menetapkannya ke variabel NSDictionary
tipe, lakukan saja pemeran eksplisit:
let nsDict = dict as! NSDictionary
Dan, seperti yang disebutkan sebelumnya, jika Anda ingin meneruskannya ke fungsi yang diharapkan NSDictionary
, berikan apa adanya tanpa perubahan atau konversi.
Dictionary
objek dan kemudian mengubahnya menjadi NSDictionary
pada akhirnya jika Anda perlu. Hebat. Terima kasih.
Anda dapat menambahkan menggunakan cara berikut dan ubah Dictionary
keNSMutableDictionary
dict["key"] = "value"
Cannot assign to the result of this expression
dict["testval"] = "test"
.. Errorfatal error: unexpectedly found nil while unwrapping an Optional value
Saya tahu ini mungkin datang sangat terlambat, tetapi mungkin terbukti bermanfaat bagi seseorang. Jadi untuk menambahkan pasangan nilai kunci ke kamus dengan cepat, Anda dapat menggunakan metode updateValue (value:, forKey:) sebagai berikut:
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)
Jadi, kamus Anda mengandung:
kamus [1: Hola, 2: Halo, 3: Aloha]
dictionary[1] = "Hola"
?
Jika kamus Anda adalah Int
untuk String
dapat Anda lakukan hanya:
dict[3] = "efg"
Jika Anda bermaksud menambahkan elemen ke nilai kamus solusi yang mungkin:
var dict = Dictionary<String, Array<Int>>()
dict["key"]! += [1]
dict["key"]!.append(1)
dict["key"]?.append(1)
Di Swift, jika Anda menggunakan NSDictionary , Anda dapat menggunakan setValue
:
dict.setValue("value", forKey: "key")
Diberikan dua kamus sebagai berikut:
var dic1 = ["a": 1, "c": 2]
var dic2 = ["e": 3, "f": 4]
Inilah cara Anda dapat menambahkan semua item dari dic2 ke dic1 :
dic2.map {
dic1[$0.0] = $0.1
}
Ceria A.
.forEach
daripada .map
karena kita tidak perlu mengembalikan array yang dipetakan
Dict.updateValue
memperbarui nilai untuk kunci yang ada dari kamus atau menambahkan pasangan nilai kunci baru jika kunci tidak ada.
Contoh-
var caseStatusParams: [String: AnyObject] = ["userId" : UserDefault.userID ]
caseStatusParams.updateValue("Hello" as AnyObject, forKey: "otherNotes")
Hasil-
▿ : 2 elements
- key : "userId"
- value : 866
▿ : 2 elements
- key : "otherNotes"
- value : "Hello"
Untuk orang-orang menggunakan [String:Any]
bukan di Dictionary
bawah ini adalah ekstensi
extension Dictionary where Key == String, Value == Any {
mutating func append(anotherDict:[String:Any]) {
for (key, value) in anotherDict {
self.updateValue(value, forKey: key)
}
}
}
Pada Swift 5, koleksi kode berikut berfungsi.
// 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)
Tidak ada fungsi untuk menambahkan data dalam kamus. Anda cukup menetapkan nilai terhadap kunci baru dalam kamus yang ada. itu akan secara otomatis menambah nilai ke kamus.
var param = ["Name":"Aloha","user" : "Aloha 2"]
param["questions"] = "Are you mine?"
print(param)
Outputnya akan seperti
["Nama": "Aloha", "pengguna": "Aloha 2", "pertanyaan": "" Apakah Anda milikku "?"]
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)
Sampai sekarang cara terbaik yang saya temukan untuk menambahkan data ke kamus dengan menggunakan salah satu fungsi tingkat tinggi Swift yaitu "mengurangi". Ikuti cuplikan kode di bawah ini:
newDictionary = oldDictionary.reduce(*newDictionary*) { r, e in var r = r; r[e.0] = e.1; return r }
@ Dharmesh Dalam kasus Anda, itu akan menjadi,
newDictionary = dict.reduce([3 : "efg"]) { r, e in var r = r; r[e.0] = e.1; return r }
Harap beri tahu saya jika Anda menemukan masalah dalam menggunakan sintaks di atas.
Swift 5 happy coding
var tempDicData = NSMutableDictionary()
for temp in answerList {
tempDicData.setValue("your value", forKey: "your key")
}
Saya menambahkan ekstensi Kamus
extension Dictionary {
func cloneWith(_ dict: [Key: Value]) -> [Key: Value] {
var result = self
dict.forEach { key, value in result[key] = value }
return result
}
}
Anda bisa menggunakan cloneWith
seperti ini
newDictionary = dict.reduce([3 : "efg"]) { r, e in r.cloneWith(e) }
jika Anda ingin memodifikasi atau memperbarui NSDictionary maka pertama-tama typecast sebagai NSMutableDictionary
let newdictionary = NSDictionary as NSMutableDictionary
maka cukup gunakan
newdictionary.setValue(value: AnyObject?, forKey: String)