当前位置 博文首页 > Golang二维切片初始化的实现

    Golang二维切片初始化的实现

    作者:Dreamcat 时间:2021-04-28 17:55

    引言

    之前,刷Leetcode的时候,有些题需要初始化二维数组,而一维数组的初始化,比如:

    var a = [5]int{1, 2, 3, 4, 5} // 用var
    b := [5]int{1, 2, 3, 4, 5} // 用类型推断
    var c = [...]int{1, 2, 3, 4, 5} // 不确定长度
    d := [...]int{1, 2, 3, 4, 5} 

    如果不知道数组元素的话,可以这样:

    var a [5]int
    b := [5]int{}
    c := make([]int, 5)
    

    注意:类型推断,可要初始化的,如果b := [5]int,就会报错的。而var a [5]int,则不需要初始化。

    二维数组初始化

    比如3*4:

    var a [3][4]int
    

    结果为:
    [[0 0 0 0] [0 0 0 0] [0 0 0 0]]

    类型推断:

    a := [3][4]int{}
    

    结果为:
    [[0 0 0 0] [0 0 0 0] [0 0 0 0]]

    注意:固定长度的时候,不能是变量,比如:

    m, n := 3, 4
    var a [m][n]int // 报错,必须是常量表达式
    

    如果一定要变量呢?那就得切片了了

    func main() {
     m, n := 3, 4
     a := make([][]int, m) // 二维切片,3行
     for i := range a {
      a[i] = make([]int, n) // 每一行4列
     }
     fmt.Println(a)
    }
    

    结果:
    [[0 0 0 0] [0 0 0 0] [0 0 0 0]]

    注意,有一种情况,如果没有规定长度或者初始化,访问元素会range out呢:

    var a []int // or a := []int{}
    fmt.Println(a) // []
    a[0] = 1 // 报错
    

    总结

    js
    下一篇:没有了