kil*_*s76 11 arrays range go multidimensional-array
是否可以在多维数组上使用range和len?
使用var a [3] int8或
package main
func main () {
var a [3][5]int8
for h := range a {
println(h)
}
println(len(a))
}
Run Code Online (Sandbox Code Playgroud)
两者都生产
0
1
2
3
?
感谢dystroy的回答,这里有一个编写和阅读我能够适应的三维数组的例子(在这里发帖,因为我很难找到任何这样的例子,所以这可能会帮助其他人):
package main
func main() {
var a [3][5][7]uint8
//write values to array
for x, b := range a {
for y, c := range b {
for z, _ := range c {
a[x][y][z] = uint8(x*100+y*10+z)
}
}
}
//read values from array
for _, h := range a {
for _, i := range h {
for _, j := range i {
print(j, "\t")
}
println()
}
println()
}
}
Run Code Online (Sandbox Code Playgroud)
Den*_*ret 12
在Go中,与大多数语言一样,您称之为多维数组的是数组数组.该len运营商只给你"外部"数组的长度.
如果你看到它,也许var声明对你来说更清楚
var a [3]([5]int8)
Run Code Online (Sandbox Code Playgroud)
这也编译.它是一个大小为3的数组,其元素是int8的大小为5的数组.
package main
import "fmt"
func main() {
var a [3][5]int8
for _, h := range a {
fmt.Println(len(h)) // each one prints 5
}
fmt.Println(len(a)) // prints 3, the length of the external array
}
Run Code Online (Sandbox Code Playgroud)
输出
5
5
5
3
Run Code Online (Sandbox Code Playgroud)
要安全地循环遍历整个矩阵,您可以这样做:
for _, h := range a {
for _, cell := range h {
fmt.Print(cell, " ")
}
fmt.Println()
}
Run Code Online (Sandbox Code Playgroud)
如果您需要更改内容,您可以这样做
for i, cell := range h { // i is the index, cell the value
h[i] = 2 * cell
}
Run Code Online (Sandbox Code Playgroud)