我正在使用Swift实现邻接表。
现在,我要添加Edge,如果该值已经存在于字典中,我想添加一个新边。
但是,if var的范围似乎仅在以下闭包之内,即
if var child = children[from] {
// child exists
child.append(to)
}
不会产生预期的结果,但是以下结果会
if var child = children[from] {
children[from]!.append(to)
}
但这看起来很丑,坦率地说是错误的。
在这种情况下,追加到字典的最佳方法是什么?
答案 0 :(得分:3)
由于您的词典值是值类型 [Int]
,因此将创建词典值的副本并将其赋予child
。这意味着您对子级所做的任何更改都不会反映在词典中。因此,您需要用对其进行更改的值替换该值。
if var child = children[from] {
child.append(to)
children[from] = child
}
或者简单地
children[from]?.append(to)