小编Coc*_*nut的帖子

当索引是隐式时,Golang中`for ... range`的迭代次序

https://golang.org/ref/spec#For_range

对于带有范围子句的语句

对于数组,指向数组的指针或切片值a,索引迭代值按递增顺序生成,从元素索引0开始.如果存在最多一个迭代变量,则范围循环生成从0到len的迭代值( a)-1并且不索引到数组或切片本身.对于nil切片,迭代次数为0.

根据规范,在Go中迭代线性数据结构(数组或切片或字符串)将使索引中的每个元素始终按索引增加的顺序排列.

for i, v := range []int{11, 22, 33, 44} {
    fmt.Println(i, v)
}
Run Code Online (Sandbox Code Playgroud)

但问题是我无法在规范中找到保证,

这个具有隐式索引迭代值的range-iterate-over子句也将始终保持相同的顺序:

for _, v := range []int{11, 22, 33, 44} {
    fmt.Println(v)
}
Run Code Online (Sandbox Code Playgroud)

我上面提到的那两个例子总是以相同的顺序执行吗?

我认为他们这样做但我还没有听到这个承诺.

for ... range当索引迭代值由空白标识符(下划线_)表示时,如何工作?

for-loop specifications go slice

0
推荐指数
1
解决办法
680
查看次数

标签 统计

for-loop ×1

go ×1

slice ×1

specifications ×1