- 数组是由固定长度特定类型元素组成的序列
- 数组可由零个或多个元素组成
Go语言中数组是固定长度且特定类型的,与之对应的是切片(Slice),切片是可以增长或收缩的动态序列。
数组声明
var 数组变量名 [元素个数]Type
- 数组变量名:数组声明及使用时的变量名
- 元素个数:数组的元素数量即数组长度,可以是表达式,但最终通过编译器计算的结果必须是整数,元素数量不能含有到运算时才能确定大小的数值。
- 数据类型:可以说任意基本类型,包括数组本身,当类型为数组本身时可实现多维数组。
数组元素可通过索引下标来访问,索引下标从0开始递增到长度减一的位置,内置函数len()
可获取数组元素个数。
package main
import "fmt"
//定义数组
var arr [10]int
func main() {
//获取数组第一个元素
fmt.Printf("array first item is %d\n", arr[0])
//获取数组最后一个元素
fmt.Printf("array last item is %d\n", arr[len(arr)-1])
//数组遍历
for k,v := range arr {
fmt.Printf("k = %d, v = %d\n", k, v)
}
for _,v := range arr{
fmt.Printf("item = %d\n", v)
}
}
数组初始化
默认数组元素会被初始化为类型对应的默认值,可使用数组字面量来初始化数组。
package main
import "fmt"
func main() {
arr := [3]int{1, 2}
for _,v := range arr{
fmt.Printf("item is %d\n", v)
}
}
数组定义中若数组长度使用...
则表示数组长度会根据初始值的个数进行计算
package main
import "fmt"
func main() {
arr := [...]int{1, 2, 3}
fmt.Printf("array type is %T\n", arr)//array type is [3]int
fmt.Printf("array length is %d\n", len(arr))//array length is 3
}
数组长度是数组类型的组成部分,数组长度必须是常量表达式,因为数组长度必须在编译阶段确定。
package main
import "fmt"
func main() {
arr := [...]int{1, 2}
arr = [3]int{1, 2, 3}//cannot use [3]int literal (type [3]int) as type [2]int in assignment
fmt.Printf("array length is %d", arr)
}
编译错误:无法将 [3]int
赋值给 [2]int
数组比较
只有当两个数组的长度和元素类型相同时才能使用==
和!=
运算符来判断是否相等
package main
import "fmt"
func main() {
arr1 := [...]int{1, 2}
arr2 := [...]int{1, 2}
fmt.Print(arr1 == arr2)//true
arr3 := [...]int{1, 2, 3}
fmt.Print(arr1 == arr3)//invalid operation: arr1 == arr3 (mismatched types [2]int and [3]int)
}
编译错误:非法操作
数组遍历
- 使用
for
循环遍历数组,遍历出的键为数组的索引,值为数组元素值。 - 数组的遍历方式和切片类似
package main
import "fmt"
func main() {
arr := [...]string{"username", "password"}
for k,v := range arr{
fmt.Printf("k = %d, v = %s\n", k, v)
}
}
多维数组
- Go语言中数组属于值类型,因此可使用多维数组。
- 多维数组所有维度都会在创建时自动初始化其默认值
- 多维数组适用于管理具有父子关系或类似坐标关联关系的数据
创建4x2的二位数组
var arr [4][2]int
使用数组字面量初始化二维数组
arr = [4][2]int{{1, 2}, {10, 20}, {100, 200}, {1000, 2000}}
声明并初始化数组中索引为1和3的元素
package main
import "fmt"
var arr [4][2]int
func main() {
arr = [4][2]int{1:{1, 2}, 3:{100, 200}}
for k,v := range arr{
fmt.Printf("k=%d, v=%v\n", k, v)
}
}
k=0, v=[0 0]
k=1, v=[1 2]
k=2, v=[0 0]
k=3, v=[100 200]
访问多维数组中单个元素的值
arr = [4][2]int{1:{1, 2}, 3:{100, 200}}
fmt.Printf("%d\n", arr[1][0])//1
网友评论