Tôi có một từ điển đơn giản được định nghĩa như sau:
var dict : NSDictionary = [ 1 : "abc", 2 : "cde"]
Bây giờ tôi muốn thêm một yếu tố vào từ điển này: 3 : "efg"
Làm thế nào tôi có thể nối 3 : "efg"
vào từ điển hiện có này?
Tôi có một từ điển đơn giản được định nghĩa như sau:
var dict : NSDictionary = [ 1 : "abc", 2 : "cde"]
Bây giờ tôi muốn thêm một yếu tố vào từ điển này: 3 : "efg"
Làm thế nào tôi có thể nối 3 : "efg"
vào từ điển hiện có này?
Câu trả lời:
Bạn đang sử dụng NSDictionary
. Trừ khi bạn rõ ràng cần loại đó vì một số lý do, tôi khuyên bạn nên sử dụng từ điển Swift.
Bạn có thể chuyển từ điển Swift cho bất kỳ chức năng NSDictionary
nào mà không cần bất kỳ công việc bổ sung nào, bởi vì Dictionary<>
và NSDictionary
liên tục kết nối với nhau. Ưu điểm của cách Swift gốc là từ điển sử dụng các loại chung, vì vậy nếu bạn xác định nó Int
là khóa và String
là giá trị, bạn không thể sử dụng nhầm các khóa và giá trị của các loại khác nhau. (Trình biên dịch kiểm tra các loại thay mặt bạn.)
Dựa trên những gì tôi thấy trong mã của bạn, từ điển của bạn sử dụng Int
làm khóa và String
làm giá trị. Để tạo một thể hiện và thêm một mục sau đó, bạn có thể sử dụng mã này:
var dict = [1: "abc", 2: "cde"] // dict is of type Dictionary<Int, String>
dict[3] = "efg"
Nếu sau này bạn cần gán nó cho một biến NSDictionary
kiểu, chỉ cần thực hiện một biểu diễn rõ ràng:
let nsDict = dict as! NSDictionary
Và, như đã đề cập trước đó, nếu bạn muốn chuyển nó đến một chức năng mong đợi NSDictionary
, hãy chuyển nó như hiện tại mà không có bất kỳ chuyển đổi hoặc chuyển đổi nào.
Dictionary
đối tượng và sau đó chuyển đổi nó thành NSDictionary
cuối nếu bạn cần. Tuyệt vời. Cảm ơn.
bạn có thể thêm bằng cách sử dụng và thay đổi Dictionary
thànhNSMutableDictionary
dict["key"] = "value"
Cannot assign to the result of this expression
dict["testval"] = "test"
.. Lỗifatal error: unexpectedly found nil while unwrapping an Optional value
Tôi biết điều này có thể đến rất muộn, nhưng nó có thể hữu ích với ai đó. Vì vậy, để nối các cặp giá trị khóa vào từ điển trong swift, bạn có thể sử dụng phương thức updateValue (value :, forKey :) như sau:
var dict = [ 1 : "abc", 2 : "cde"]
dict.updateValue("efg", forKey: 3)
print(dict)
Chuyển 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)
Vì vậy, từ điển của bạn chứa:
từ điển [1: Hola, 2: Xin chào, 3: Aloha]
dictionary[1] = "Hola"
?
Nếu từ điển của bạn là Int
để String
bạn có thể làm chỉ đơn giản là:
dict[3] = "efg"
Nếu bạn muốn thêm các yếu tố vào giá trị của từ điển thì một giải pháp khả thi:
var dict = Dictionary<String, Array<Int>>()
dict["key"]! += [1]
dict["key"]!.append(1)
dict["key"]?.append(1)
Trong Swift, nếu bạn đang sử dụng NSDipedia , bạn có thể sử dụng setValue
:
dict.setValue("value", forKey: "key")
Cho hai từ điển như sau:
var dic1 = ["a": 1, "c": 2]
var dic2 = ["e": 3, "f": 4]
Đây là cách bạn có thể thêm tất cả các mục từ dic2 đến dic1 :
dic2.map {
dic1[$0.0] = $0.1
}
Chúc mừng A.
.forEach
thay vì .map
chúng ta không cần bất kỳ mảng ánh xạ trả lại nào
Dict.updateValue
cập nhật giá trị cho khóa hiện tại từ từ điển hoặc thêm cặp khóa-giá trị mới nếu khóa không tồn tại.
Thí dụ-
var caseStatusParams: [String: AnyObject] = ["userId" : UserDefault.userID ]
caseStatusParams.updateValue("Hello" as AnyObject, forKey: "otherNotes")
Kết quả-
▿ : 2 elements
- key : "userId"
- value : 866
▿ : 2 elements
- key : "otherNotes"
- value : "Hello"
Đối với các nghiên cứu sinh sử dụng [String:Any]
thay vì Dictionary
dưới đây là phần mở rộng
extension Dictionary where Key == String, Value == Any {
mutating func append(anotherDict:[String:Any]) {
for (key, value) in anotherDict {
self.updateValue(value, forKey: key)
}
}
}
Kể từ Swift 5, bộ sưu tập mã sau hoạt động.
// 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)
Không có chức năng nối thêm dữ liệu trong từ điển. Bạn chỉ cần gán giá trị cho khóa mới trong từ điển hiện có. nó sẽ tự động thêm giá trị vào từ điển.
var param = ["Name":"Aloha","user" : "Aloha 2"]
param["questions"] = "Are you mine?"
print(param)
Đầu ra sẽ như thế nào
["Tên": "Aloha", "người dùng": "Aloha 2", "câu hỏi": "" Bạn có phải là của tôi "không?"]
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)
Cho đến nay, cách tốt nhất mà tôi đã tìm thấy để nối dữ liệu vào từ điển bằng cách sử dụng một trong các chức năng bậc cao hơn của Swift tức là "giảm". Thực hiện theo đoạn mã dưới đây:
newDictionary = oldDictionary.reduce(*newDictionary*) { r, e in var r = r; r[e.0] = e.1; return r }
@ Dharmesh Trong trường hợp của bạn, nó sẽ là,
newDictionary = dict.reduce([3 : "efg"]) { r, e in var r = r; r[e.0] = e.1; return r }
Xin vui lòng cho tôi biết nếu bạn tìm thấy bất kỳ vấn đề trong việc sử dụng cú pháp trên.
Swift 5 mã hóa hạnh phúc
var tempDicData = NSMutableDictionary()
for temp in answerList {
tempDicData.setValue("your value", forKey: "your key")
}
Tôi đã thêm phần mở rộng từ điển
extension Dictionary {
func cloneWith(_ dict: [Key: Value]) -> [Key: Value] {
var result = self
dict.forEach { key, value in result[key] = value }
return result
}
}
bạn có thể sử dụng cloneWith
như thế này
newDictionary = dict.reduce([3 : "efg"]) { r, e in r.cloneWith(e) }
nếu bạn muốn sửa đổi hoặc cập nhật NSDipedia thì trước hết hãy gõ nó dưới dạng NSMutableDipedia
let newdictionary = NSDictionary as NSMutableDictionary
sau đó chỉ cần sử dụng
newdictionary.setValue(value: AnyObject?, forKey: String)