是否可以在多维数组上使用range和len?
使用var a [3] int8或
package main
func main () {
var a [3][5]int8
for h := range a {
println(h)
}
println(len(a))
}
两者都产生
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()
}
}
答案 0 :(得分:9)
在Go中,与大多数语言一样,您所谓的多维数组是一个数组数组。 len
运算符仅为您提供“外部”数组的长度。
如果您将var声明视为
,那么var声明可能更清晰var a [3]([5]int8)
也编译。它是一个大小为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
}
输出
5
5
5
3
要安全地循环遍历整个矩阵,您可以这样做:
for _, h := range a {
for _, cell := range h {
fmt.Print(cell, " ")
}
fmt.Println()
}
如果您需要更改内容,可以
for i, cell := range h { // i is the index, cell the value
h[i] = 2 * cell
}
答案 1 :(得分:1)
已经提供了具有范围的解决方案,因此我将讨论如何使用长度(len)遍历golang中的多维数组。
因此,如果您有一个数组arr[][]
:
[1,2,3]
[4,5,6]
现在len(arr)
将输出= 2。
在len(arr[1]) will output = 3
期间。
此处提供了示例代码:https://play.golang.org/p/XerzPhkQrhU
答案 2 :(得分:0)
不,第一个产生0,1,2(范围内的指数)
http://play.golang.org/p/0KrzTRWzKO
第二个产生3(数组的长度)。
http://play.golang.org/p/0esKFqQZL0
在这两种情况下,您都在使用最外层的数组。