我试图在字典中插入新的键值对,它嵌套在另一个Dictionary
中:
var dict = Dictionary<Int, Dictionary<Int, String>>()
dict.updateValue([1 : "one", 2: "two"], forKey: 1)
dict[1]?[1] // {Some "one"}
if var insideDic = dict[1] {
// it is a copy, so I can't insert pair this way:
insideDic[3] = "three"
}
dict // still [1: [1: "one", 2: "two"]]
dict[1]?[3] = "three" // Cannot assign to the result of this expression
dict[1]?.updateValue("three", forKey: 3) // Could not find a member "updateValue"
我认为应该是一种处理它的简单方法,但我花了一个小时仍然无法弄明白。
我可以使用NSDictionary
代替,但我真的想了解如何在Swift中管理嵌套的Dictionaries
?
答案 0 :(得分:2)
Dictionarys是值类型,因此在赋值时被复制。因此,您将不得不获取内部字典(将是一个副本),添加新密钥,然后重新分配。
// get the nested dictionary (which will be a copy)
var inner:Dictionary<Int, String> = dict[1]!
// add the new value
inner[3] = "three"
// update the outer dictionary
dict[1] = inner
println(dict) // [1: [1: one, 2: two, 3: three]]
您可以使用其中一个新的实用程序库(例如ExSwift)来简化这一过程:
dict[1] = dict[1]!.union([3:"three"])
这使用了结合两个词典的union method。