登录
首页 >  Golang >  Go问答

在 Go 中迭代地图时修改地图

来源:stackoverflow

时间:2024-04-13 22:00:36 501浏览 收藏

有志者,事竟成!如果你在学习Golang,那么本文《在 Go 中迭代地图时修改地图》,就很适合你!文章讲解的知识点主要包括,若是你对本文感兴趣,或者是想搞懂其中某个知识点,就请你继续往下看吧~

问题内容

鉴于以下代码,我预计会出现无限循环,但循环在某个点停止。

m := make(map[int]string, 4)
m[0] = "foo"
    
for k, v := range m {
    m[k+1] = v
}

我无法弄清楚幕后发生了什么,因为不同的执行会返回不同的输出。例如,以下是不同执行的一些输出:

map[0:Foo 1:Foo 2:Foo 3:Foo 4:Foo 5:Foo 6:Foo 7:Foo]
map[0:Foo 1:Foo]
map[0:Foo 1:Foo 2:Foo]

range 如何工作以便在某个点退出循环以及退出条件是什么?


正确答案


Spec: For statements with range clause 表示该行为是不可预测的:

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

将元素添加到您正在浏览的地图中,这些条目可能会或可能不会被循环访问,您不应该对此做出任何假设。

基于语言规范: p>

因此,如果跳过新元素,for 循环最终会结束。

理论要掌握,实操不能落!以上关于《在 Go 中迭代地图时修改地图》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>