Array数组
定义
数组是同一种数据类型元素的集合。 在Go语言中,数组声明时必须指定元素类型和长度。使用时只可以修改元素值,不可修改长度。不同长度或元素类型的数组属于不同的类型。
var a1 [3]bool // 定义了元素类型是bool,长度为3的数组var a2 [4]bool// 输出数组类型,可见数组类型由元素类型和长度共同决定fmt.Printf(\"%T %T\", a1, a2) // [3]bool [4]bool
一维数组初始化
- 直接声明可以将元素默认初始化为对应类型的零值。
var a1 [3]boolfmt.Println(a1) // [false false false]
- 使用初始化列表来设置元素值,如果列表元素个数少于数组长度,则超出部分初始化为零值。
var a3 = [3]int{1, 2, 3}fmt.Println(a3) // [1 2 3]var a4 = [5]int{1, 2, 3}fmt.Println(a4) // [1 2 3 0 0]
- 利用初始化列表来决定数组长度,编译器会根据初始化列表中元素个数来推断数组长度。
var a5 = [...]int{1, 2, 3}fmt.Printf(\"%T\\n\", a5) // [3]int
- 初始化指定索引位置,未指定的元素初始化为零值
var a6 = [5]int{2: 3, 4: 5}fmt.Println(a6) // [0 0 3 0 5]
一维数组遍历
- 索引遍历
var a7 = [...]int{5, 4, 3, 2, 1}for i := 0; i < len(a7); i++ {fmt.Printf(\"%d \", a7[i])} // 5 4 3 2 1
- for range 遍历
var a7 = [...]int{5, 4, 3, 2, 1}for _, v := range a7 {fmt.Printf(\"%d \", v)} // 5 4 3 2 1
二维数组
初始化方式与一维数组类似。
- 直接声明时元素默认初始化为零值
var a8 [3][2]intfmt.Println(a8) // [[0 0] [0 0] [0 0]]
- 使用初始化列表
var a9 = [3][2]int{{1, 2},{3, 4},{5, 6},}fmt.Println(a9) // [[1 2] [3 4] [5 6]]
初始化列表元素个数不够时,多出部分初始化为零值
var a10 = [3][2]int{{1, 2},{3},}fmt.Println(a10) // [[1 2] [3 0] [0 0]]
- 利用初始化列表决定第一层长度。注意只能省略第一层长度
var a11 = [...][2]int{{1, 2},{3},{5, 6},}fmt.Printf(\"%T\\n\", a11) // [3][2]intfmt.Println(a11) // [[1 2] [3 0] [5 6]]
二维数组的遍历同一维数组类似,只是需要两层 for 循环。
可从二维数组类推到多维数组。
*T表示指针数组,*
T表示数组指针
参考:https://www.liwenzhou.com/posts/Go/05_array/