我在操场上尝试过以下操作:
var d1 = [String: [String]]()
d1["a"] = [String]()
var a1 = d1["a"]!
a1.append("s1")
println(d1)
输出是:[a: []]
我希望:[a: ["s1"]]
改变字典中数组的正确方法是什么?
在 swift 中,当结构被分配给新变量时,它们会按值复制。所以,当你分配a1
它实际上创建了字典中的值的副本。这是我正在谈论的一行:
var a1 = d1["a"]!
一旦该行被调用,实际上有两个列表:d1["a"]
以及所引用的列表a1
。因此,当您调用以下行时,只有第二个列表会被修改:
a1.append("s1")
当您进行打印时,您正在打印第一个列表(存储为键"a"
在字典中d1
)。您可以使用以下两种解决方案来获得预期结果。
选项1:直接追加到数组里面d1
.
var d1 = [String : [String]]()
d1["a"] = [String]()
d1["a"]?.append("s1")
println(d1)
选项 2:追加到复制的数组并将该值分配给"a"
in d1
.
var d1 = [String : [String]]()
d1["a"] = [String]()
var a1 = d1["a"]!
a1.append("s1")
d1["a"] = a1
println(d1)
第一个解决方案性能更高,因为它不会创建列表的临时副本。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)