为了账号安全,请及时绑定邮箱和手机立即绑定

去:多维数组的范围和len?

去:多维数组的范围和len?

Go
慕斯王 2021-05-21 22:19:50
是否可以在多维数组上使用range和len?使用var a [3] int8或package mainfunc main () {            var a [3][5]int8        for h := range a {                println(h)        }        println(len(a))}两者都产生 0123?多亏了dystroy的回答,这是一个我能够适应的编写和读取3维数组的示例(在这里发帖是因为我很难找到任何此类示例,因此也许会对其他人有所帮助):package mainfunc 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()    }}
查看完整描述

3 回答

?
临摹微笑

TA贡献1982条经验 获得超2个赞

与大多数语言一样,在Go语言中,所谓的多维数组是数组的数组。该len运营商只给你“外部”数组的长度。


如果您认为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

    }


查看完整回答
反对 回复 2021-05-24
  • 3 回答
  • 0 关注
  • 233 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信