This question already has answers here:
Is it safe to remove selected keys from map within a range loop?

(4个答案)


1年前关闭。




我写了一些能做到这一点的代码,并且运行良好,但是在查看代码时,我意识到我所做的工作可能无法在其他语言下工作。

举一个人为的例子:
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是否在内部创建副本?

最佳答案

和往常一样,the spec是确定的答案。向下滚动到“对于带范围子句的语句”,第3项(强调我的):

关于go - 在迭代字典键时删除字典键是否安全? [复制],我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56048259/

10-11 21:35