Array数组

定义

数组是同一种数据类型元素的集合,是值类型。 在Go语言中,数组声明时必须指定元素类型和长度。使用时只可以修改元素值,不可修改长度。不同长度或元素类型的数组属于不同的类型。

var a1 [3]bool // 定义了元素类型是bool,长度为3的数组
var a2 [4]bool
// 输出数组类型,可见数组类型由元素类型和长度共同决定
fmt.Printf("%T %T", a1, a2) // [3]bool [4]bool

一维数组初始化

  1. 直接声明可以将元素默认初始化为对应类型的零值。
var a1 [3]bool
fmt.Println(a1) // [false false false]
  1. 使用初始化列表来设置元素值,如果列表元素个数少于数组长度,则超出部分初始化为零值。
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]
  1. 利用初始化列表来决定数组长度,编译器会根据初始化列表中元素个数来推断数组长度。
var a5 = [...]int{1, 2, 3}
fmt.Printf("%T\n", a5) // [3]int
  1. 初始化指定索引位置,未指定的元素初始化为零值
var a6 = [5]int{2: 3, 4: 5}
fmt.Println(a6) // [0 0 3 0 5]

一维数组遍历

  1. 索引遍历
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 
  1. for range 遍历
var a7 = [...]int{5, 4, 3, 2, 1}
for _, v := range a7 {
	fmt.Printf("%d ", v)
} // 5 4 3 2 1 

二维数组

初始化方式与一维数组类似。

  1. 直接声明时元素默认初始化为零值
var a8 [3][2]int
fmt.Println(a8) // [[0 0] [0 0] [0 0]]
  1. 使用初始化列表
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]]
  1. 利用初始化列表决定第一层长度。注意只能省略第一层长度
var a11 = [...][2]int{
	{1, 2},
	{3},
	{5, 6},
}
fmt.Printf("%T\n", a11) // [3][2]int
fmt.Println(a11)        // [[1 2] [3 0] [5 6]]

二维数组的遍历同一维数组类似,只是需要两层 for 循环。
可从二维数组类推到多维数组。
[n]*T表示指针数组,*[n]T表示数组指针