Go语言数组的声明
2020-01-31 本文已影响0人
码二哥
参考:
http://c.biancheng.net/view/26.html
关键点
- 数组的长度是
固定
的 - 元素个数可以是
0个
或者多个
-
数组
的构成三要素
:- 数组变量名
- 元素个数
- 元素类型
- 如何
访问
数组里的元素呢? 通过下标
访问数组里
的元素 - 如何判断
两个数组
是相同类型
的数组
呢?- 元素的
类型
相同 - 元素的
个数
相同
- 元素的
- 数组的
长度
如何确定?- 通过'...',初始化时的
元素个数
就是数组的长度 -
直接声明
时,设置的,如:var stds [3]string, 3个元素个数
- 通过'...',初始化时的
-
遍历数组
的方式
?- 通过
range
- 通过
下标
方式
- 通过
数组
是一个由固定长度
的特定类型元素
组成的序列,
一个数组可以由零个
或多个元素
组成。
因为数组的长度
是固定
的,所以在Go语言中很少直接使用数组。
1、Go语言数组的声明
数组的声明语法如下:
var 数组变量名 [元素数量]Type
语法说明
如下所示:
- 数组
变量名
:数组声明及使用时的变量名
-
元素数量
:数组的元素数量,可以是一个表达式
,但最终通过编译期计算
的结果必须是整型数值,元素数量不能含有到运行时
才能确认大小的数值。 - Type:可以是
任意基本类型
,包括数组本身,类型为数组本身时,可以实现多维
数组。
1.1、如何访问
数组里的元素
?
数组的每个元素都可以通过索引下标
来访问,索引下标的范围是从 0 开始到数组长度减 1 的位置,内置函数 len() 可以返回数组中元素的个数。
var a [3]int // 定义三个整数的数组
fmt.Println(a[0]) // 打印第一个元素
fmt.Println(a[len(a)-1]) // 打印最后一个元素
// 打印索引和元素
for i, v := range a {
fmt.Printf("%d %d\n", i, v)
}
// 仅打印元素
for _, v := range a {
fmt.Printf("%d\n", v)
}
1.2、数组的默认初始化
?
默认情况下,数组的每个元素都会被初始化为元素类型对应的零值
,对于数字类型来说就是 0,同时也可以使用数组字面值语法,用一组值来初始化数组:
var q [3]int = [3]int{1, 2, 3}
var r [3]int = [3]int{1, 2}
fmt.Println(r[2]) // "0"
1.3、数组的长度
如何设置
?
在数组的定义中,如果在数组长度的位置出现“...”省略号,则表示数组的长度
是根据初始化值
的个数
来计算,因此,上面数组 q 的定义可以简化为:
q := [...]int{1, 2, 3}
fmt.Printf("%T\n", q) // "[3]int"
2、什么条件下数组类型
相同?
- 数组的
长度
,
- 数组中元素的
类型
都相同的情况下,是 两个数组类型相同
2.1、[3]int
和 [4]int
是否是同一种数组类型?
数组的长度是数组类型
的一个组成部分,因此 [3]int 和 [4]int 是两种不同的数组类型,数组的长度必须是常量表达式,因为数组的长度需要在编译阶段确定。
q := [3]int{1, 2, 3}
q = [4]int{1, 2, 3, 4} // 编译错误:无法将 [4]int 赋给 [3]int
3、比较两个数组是否相等
如果两个数组类型相同
的情况下,我们可以直接通过比较运算符
(==和 !=)来判断两个数组是否相等
,
只有当两个数组的所有元素
都是相等的时候数组才是相等的,不能比较
两个类型不同
的数组
,否则程序将无法完成编译
。
a := [2]int{1, 2}
b := [...]int{1, 2}
c := [2]int{1, 3}
fmt.Println(a == b, a == c, b == c) // "true false false"
d := [3]int{1, 2}
fmt.Println(a == d) // 编译错误:无法比较 [2]int == [3]int
4、遍历数组——访问每一个数组元素
遍历数组也和遍历切片类似,代码如下所示:
var team [3]string
team[0] = "hammer"
team[1] = "soldier"
team[2] = "mum"
for k, v := range team {
fmt.Println(k, v)
}
代码输出结果:
0 hammer
1 soldier
2 mum
代码说明如下:
- 第 6 行,使用 for 循环,遍历 team 数组,遍历出的键 k 为数组的索引,值 v 为数组的每个元素值。
- 第 7 行,将每个键值打印出来。