考虑这段代码,它将数组分配给字典值,然后附加到数组中。 (实际上它会遍历字符串中的字符;这是简化版本。)
var letterIndexes = [Character: [Int]]()
let letter: Character = "a"
var indexes: Array<Int>? = letterIndexes[letter]
if indexes == nil {
indexes = Array<Int>()
letterIndexes[letter] = indexes
}
indexes!.append(0)
letterIndexes的值现在为[ "a": 0 elements ]
。
我原以为[ "a": [ 0 ] ]
。
看起来letterIndexes[letter] = indexes
制作了indexes
的副本。我想避免在字典中进行不必要的查找。如果这不是一个问题,我可以在if后做letterIndexes[letter]!.append(0)
并且它会起作用。
我误解了这里发生了什么吗?我在做一些蠢事吗?
答案 0 :(得分:0)
docs州:
值类型是一种类型,在将值分配给变量或常量时,或者将值传递给函数时,将复制该值。
所以当您在
中指定indexes
时
letterIndexes[letter] = indexes
它会创建索引副本,因此附加到indexes
不会修改letterIndexes
。