【发布时间】:2019-09-26 15:08:49
【问题描述】:
我编写了一些执行此操作的代码,并且运行良好,但在查看代码时,我意识到我所做的可能不适用于其他语言。
举一个人为的例子:
dict := map[string]string{ "a": "1", "b": "2" }
for key, val := range dict {
fmt.Println(val)
delete(dict, "b")
}
这会打印“1”和“2”,然后当我检查dict 时,它只是{ "a": "1" }。
所以,我觉得这样做是安全的,但我想知道为什么?
range dict 是否在内部创建副本?
【问题讨论】:
-
@colminator 不是重复的。 OP 询问如果在之前的迭代中删除了另一个元素,是否会打印它。
-
OP没有问这个。
-
嗯,实际问题的措辞几乎与Is it safe to remove selected keys from map within a range loop 相同,而答案只是引用自规范。
-
它们是同一枚硬币的两个方面......这个问题的重点是它是安全的情况,但我的问题更具体地是关于它的情况不安全(我的代码在问题中)
-
但是它是安全的,那么问题有什么不同呢?此外,迭代顺序是不确定的,因此您的示例可能会在运行时打印一个或两个值。
标签: go