可以在多维数组上使用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()
}
}
在围棋中,和大多数语言一样,你所说的多维数组就是一个数组。在Go语言中,就像在大多数语言中一样,你所说的多维数组就是数组。len
操作符只给你 "外部 "数组的长度。
如果你把var声明看成是 "外部 "数组的长度,也许你会更清楚。
var a [3]([5]int8)
它也可以编译。它是一个大小为3的数组,其元素是大小为5的int8数组。
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
}
已经提供了范围的解决方案,所以我将讨论如何在golang中使用长度(len)来通过一个多元素数组。
所以如果你有一个数组 arr[][]
:
[1,2,3]
[4,5,6]
现在 len(arr)
将输出=2。
而 len(arr[1]) will output = 3
.
示例代码在这里提供。https:/play.golang.orgpXerzPhkQrhU
不是,第一个产生0,1,2(范围内的指数)。
http:/play.golang.orgp0KrzTRWzKO
第二条产生3(数组的长度)。
http:/play.golang.orgp0esKFqQZL0
在这两种情况下,你都在使用最外层的数组。