如何将值插入嵌套的Swift Dictionary中

时间:2014-07-03 13:11:41

标签: dictionary collections swift

我试图在字典中插入新的键值对,它嵌套在另一个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

1 个答案:

答案 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