package main
import (
"fmt"
)
func main() {
m := make(map[int]int, 4)
m[1] = 0
m[2] = 0
for k, _ := range m {
i := 10 + k
m[i] = 0
}
fmt.Println(m)
fmt.Println("len:", len(m))
}
此代码返回:循环后映射的长度为8或10或6。 视频是here,播放背景 here。
我看到新添加的元素进入范围,但无法解释为什么此循环随机停止?
答案 0 :(得分:3)
未指定地图上的迭代顺序,并且不能保证每次迭代之间都相同。如果在迭代过程中删除了尚未到达的映射条目,则不会生成相应的迭代值。 如果在迭代过程中创建了地图条目,则该条目可能会在迭代过程中产生或被跳过。对于创建的每个条目以及从一个迭代到下一个迭代,选择可能会有所不同。如果映射为nil,则迭代次数为0。
该规范指出,如果您在地图上添加条目,则循环可能会或可能不会访问您添加的元素,此外,被访问的元素甚至无法确定(再次执行时可能会更改) )。
答案 1 :(得分:0)
您正在修改要迭代的地图。这是原因。