共计 717 个字符,预计需要花费 2 分钟才能阅读完成。
导读 | 本文主要介绍 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 // 报错
正文完
星哥玩云-微信公众号