2023-02-16 04:21PM
Go 语言提供了数组类型的数据结构。
数组是具有相同唯一类型的一组已编号且长度固定的数据项序列,这种类型可以是任意的原始类型例如整型、字符串或者自定义类型。
数组元素可以通过索引(位置)来读取(或者修改),索引从0开始,第一个元素索引为 0,第二个索引为 1,以此类推。
1.声明数组:
Go 语言数组声明需要指定元素类型及元素个数,语法格式如下:
var variable_name [SIZE] variable_type
以上为一维数组的定义方式。数组长度必须是整数且大于 0。例如以下定义了数组 balance 长度为 10,类型为 float32:
var balance [10] float32
2.初始化数组:
以下演示了数组初始化:
var balance = [5]float32{1000.0, 2.0, 3.4, 7.0, 50.0}
初始化数组中 {} 中的元素个数不能大于 [] 中的数字。
如果忽略 [] 中的数字不设置数组大小,Go 语言会根据元素的个数来设置数组的大小:
var balance = []float32{1000.0, 2.0, 3.4, 7.0, 50.0}
该实例与上面的实例是一样的,虽然没有设置数组的大小。
balance[4] = 50.0
以上实例读取了第五个元素。数组元素可以通过索引(位置)来读取(或者修改),索引从0开始,第一个元素索引为 0,第二个索引为 1,以此类推。
3.访问数组元素:
数组元素可以通过索引(位置)来读取。格式为数组名后加中括号,中括号中为索引的值。例如:
var salary float32 = balance[9]
salary := balance[9]
以上实例读取了数组balance第10个元素的值
数组存放的是固定长度、相同类型的数据,而且这些存放的元素是连续的。所存放的数据类型没有限制,可以是整型、字符串甚至自定义。
(1).数组声明
在下面的代码示例中,声明了一个字符串数组,长度是 5,所以其类型定义为 [5]string,其中大括号中的元素用于初始化数组。此外,在类型名前加 [] 中括号,并设置好长度,就可以通过它来推测数组的类型。
注意:[5]string 和 [4]string 不是同一种类型,也就是说长度也是数组类型的一部分。
array:=[5]string{"a","b","c","d","e"}
数组在内存中都是连续存放的,下面通过一幅图片形象地展示数组在内存中如何存放:
可以看到,数组的每个元素都是连续存放的,每一个元素都有一个下标(Index)。下标从 0 开始,比如第一个元素 a 对应的下标是 0,第二个元素 b 对应的下标是 1。以此类推,通过 array+[下标] 的方式,我们可以快速地定位元素。
如下面代码所示,运行它,可以看到输出打印的结果是 c,也就是数组 array 的第三个元素:
func main() { array:=[5]string{"a","b","c","d","e"} fmt.Println(array[2])}
在定义数组的时候,数组的长度可以省略,这个时候 Go 语言会自动根据大括号 {} 中元素的个数推导出长度,所以以上示例也可以像下面这样声明:
array:=[...]string{"a","b","c","d","e"}
以上省略数组长度的声明只适用于所有元素都被初始化的数组,如果是只针对特定索引元素初始化的情况,就不适合了,如下示例:
array1:=[5]string{1:"b",3:"d"}
示例中的「1:"b",3:"d"」的意思表示初始化索引 1 的值为 b,初始化索引 3 的值为 d,整个数组的长度为 5。如果我省略长度 5,那么整个数组的长度只有 4,显然不符合我们定义数组的初衷。
此外,没有初始化的索引,其默认值都是数组类型的零值,也就是 string 类型的零值 "" 空字符串。
除了使用 [] 操作符根据索引快速定位数组的元素外,还可以通过 for 循环打印所有的数组元素,如下面的代码所示:
for i:=0;i<5;i++{ fmt.Printf("数组索引:%d,对应值:%s\n", i, array[i])}
(2).数组循环
使用传统的 for 循环遍历数组,输出对应的索引和对应的值,这种方式很烦琐,一般不使用,大部分情况下,我们使用的是 for range 这种 Go 语言的新型循环,如下面的代码所示:
for i,v:=range array{ fmt.Printf("数组索引:%d,对应值:%s\n", i, v)}
这种方式和传统 for 循环的结果是一样的。对于数组,range 表达式返回两个结果:
第一个是数组的索引
第二个是数组的值
在上面的示例中,把返回的两个结果分别赋值给 i 和 v 这两个变量,就可以使用它们了。
相比传统的 for 循环,for range 要更简洁,如果返回的值用不到,可以使用 _ 下划线丢弃,如下面的代码所示:
for _,v:=range array{ fmt.Printf("对应值:%s\n", v)}
数组的索引通过 _ 就被丢弃了,只使用数组的值 v 即可。
登录
请登录后再发表评论。
评论列表:
目前还没有人发表评论