在Go中迭代多维数组

时间:2014-10-15 10:53:38

标签: go

在以下代码示例中

var a [3][5]int8
for _, h := range a {
    for _, cell := range h {
        fmt.Print(cell, " ")
    }
    fmt.Println()
}

是每次迭代中a行的副本吗?即,h是否包含a行的副本或h是否会引用它?

1 个答案:

答案 0 :(得分:4)

副本。例如,

package main

import "fmt"

func main() {
    var a [3][5]int8
    fmt.Println(a)
    for _, h := range a {
        h = [5]int8{1, 2, 3, 4, 5}
        for _, cell := range h {
            fmt.Print(cell, " ")
        }
        fmt.Println()
    }
    fmt.Println(a)

}

输出:

[[0 0 0 0 0] [0 0 0 0 0] [0 0 0 0 0]]
1 2 3 4 5 
1 2 3 4 5 
1 2 3 4 5 
[[0 0 0 0 0] [0 0 0 0 0] [0 0 0 0 0]]
  

The Go Programming Language Specification

     

For statements

     

A" for"声明带有"范围"子句遍历所有条目   数组,切片,字符串或映射,或在通道上接收的值。   对于每个条目,它将迭代值分配给相应的迭代   变量然后执行块。

     

将迭代值分配给相应的迭代   变量,如赋值语句。