接下来我们来学习一下 Go 语言中数组的相关使用及常见的操作。
定义
数组是同一种数据类型元素的集合。Go 语言的数组从声明时就是确定的,使用时元素可以修改,但数组长度不可变,基本语法如下:
var 数组变量名 [元素数量]数据类型
var a [3]int
说明:数组的长度必须是常量,并且一旦定义之后,长度不能变。
初始化
数组的初始化和变量一样有很多种初始化方式。
方式一
使用初始化列表来设置数组元素的值。示例如下:
func main() {
var baseArray [3]int
var numArray = [3]int{1, 2}
var stringArray = [2]string{"杭州", "上海"}
fmt.Println(baseArray) // [0 0 0]
fmt.Println(numArray) // [1 2 0]
fmt.Println(stringArray) // [杭州 上海]
}
从上面的示例中可以看出以下几点:
int
类型的初始化值为零。- 可以指定初始化的数值,未被初始化数值的元素会初始化为该类型的默认值。
方式二
上面的方式在初始化时数组的需要提供初始值和数组长度,其实我们还可以像变量一样采用自行推断的方式,示例如下:
func main() {
var baseArray [3]int
var numArray = [...]int{1, 2}
var stringArray = [...]string{"杭州", "北京", "上海"}
fmt.Println(baseArray) // [0 0 0]
fmt.Println(numArray) // [1 2 0]
fmt.Println(stringArray) // [杭州 北京 上海]
}
方式三
使用指定索引值方式来初始化数组,示例如下:
func main() {
var a = [...]int{1: 1, 3: 5}
fmt.Println(a) // [0 1 0 5]
fmt.Printf("type of a:%T\n", a) // type of a:[4]int
}
遍历
遍历数组有以下两种方法,示例如下:
func main() {
a := [...]string{"大王", "小王", "王炸"}
// 方式一:for 循环遍历
for i := 0; i < len(a); i++ {
fmt.Println(a[i])
}
// 方式二:for range 循环遍历
for index, value := range a {
fmt.Println(index, value)
}
}
多维数组
Go语言同样也是支持多维数组的,下面以二维数组为例来学习一下吧~
二维数组的定义
func main() {
a := [...][2]int{
{11, 12},
{21, 22},
}
fmt.Println(a) // [[11 12] [21 22]]
fmt.Println(a[0][1]) // 12
}
说明:多维数组的第一层是可以使用...
来让编译器自动推导数组长度的
二维数组的遍历
func main() {
a := [...][2]string{
{"杭州", "北京"},
{"上海", "深圳"},
}
for _, v1 := range a {
for _, v2 := range v1 {
fmt.Printf("%s\t", v2)
}
fmt.Println()
}
}
输出:
杭州 北京
上海 深圳
关于数组需要注意以下几点:
- 数组是值类型的,因此改变副本的值并不会改变本身的值。
- 数组支持“==”、“!=”操作符,因为内存总是被初始化过的。
[n]*T
表示指针数组,*[n]T
表示数组指针。