Golang二维切片初始化


本文摘自网络,作者,侵删。

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


本文来自:简书

感谢作者:Dreamcats

查看原文:Golang二维切片初始化

相关阅读 >>

Golang menu

Go-const

Golang 获取文件名称、后缀

使用 Go modules

手撸Golang Go与微服务 net.rpc之1

Gocn酷Go推荐】Go程序配置利器-viper库

Go语言指针

聊聊dapr的fswatcher

Golang如何打包

两个Golang超大文件读取的方案

更多相关阅读请进入《Go》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...