如何在范围循环中添加到地图

时间:2019-03-28 13:48:57

标签: loops dictionary go range

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

我看到新添加的元素进入范围,但无法解释为什么此循环随机停止?

2 个答案:

答案 0 :(得分:3)

Spec: For statements:

  

未指定地图上的迭代顺序,并且不能保证每次迭代之间都相同。如果在迭代过程中删除了尚未到达的映射条目,则不会生成相应的迭代值。 如果在迭代过程中创建了地图条目,则该条目可能会在迭代过程中产生或被跳过。对于创建的每个条目以及从一个迭代到下一个迭代,选择可能会有所不同。如果映射为nil,则迭代次数为0。

该规范指出,如果您在地图上添加条目,则循环可能会或可能不会访问您添加的元素,此外,被访问的元素甚至无法确定(再次执行时可能会更改) )。

答案 1 :(得分:0)

您正在修改要迭代的地图。这是原因。