美文网首页
Golang二维切片初始化

Golang二维切片初始化

作者: 司司 | 来源:发表于2021-04-07 16:10 被阅读0次

Golang二维切片初始化

引言

之前,刷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 // 报错

总结

看起来,二维数组初始化比其他语言稍微麻烦一些呀...

定期更新go-notes

相关文章

  • Golang二维切片初始化

    Golang二维切片初始化 引言 之前,刷Leetcode的时候,有些题需要初始化二维数组,而一维数组的初始化,比...

  • golang-101-hacks(13)——二维切片

    注:本文是对golang-101-hacks中文翻译。Go支持多维切片,再此只对二维切片切片做介绍。日常生活中通常...

  • Golang数组和切片的区别

    Golang数组和切片的区别 大纲 数组是固定大小 切片不是动态数组,可以扩容 区别 定义方式不一样 初始化方法不...

  • golang 二维切片排序

  • golang排序二维切片

    排序二维切片,思路算是比较明确,但是中间由于某些细节没有处理好,导致调试了很久才写出正确的版本。 出现失误的地方在...

  • the way to go:练习7.11和练习7.12

    golang学习,切片操作。 运行结果

  • Golang:切片

    切片(slice)是建立在数组之上的更方便,更灵活,更强大的数据结构。切片并不存储任何元素而只是对现有数组的引用。...

  • golang切片

    定义 slice 并不是数组或数组指针。它通过内部指针和相关属性引用数组片段,以实现变长方案。 使用方式 切片:切...

  • golang切片

    切片是对数组的抽象 slice 总是指向底层的一个 array。 slice 是一个指向 array 的指针,这是...

  • Golang:切片

    切片 切片(Slice)是一个拥有相同类型元素的可变长度的序列。它是基于数组类型做的一层封装。非常灵活,支持自动扩...

网友评论

      本文标题:Golang二维切片初始化

      本文链接:https://www.haomeiwen.com/subject/ckeukltx.html