数组
八、数组
Go 语言提供了数组类型的数据结构。
数组是同一类型元素的集合,这种类型可以是任意的原始类型例如整型、字符串或者自定义类型。例如,整数集合 5,8,9,79,76 形成一个
数组。Go 语言中不允许混合不同类型的元素,例如包含字符串和整数的数组。(当然,如果是 interface{} 类型数组,可以包含任意类
型)
1 声明数组
Go 语言数组声明需要指定元素类型及元素个数,语法格式如下:
var variable_name [SIZE] variable_type
以上为一维数组的定义方式。举例:
var a [3]int
var a[3]int 声明了一个长度为 3 的整型数组。数组中的所有元素都被自动赋值为数组类型的零值,在这种情况下,a
是一个整型数组,
因此 a
的所有元素都被赋值为 0
,即 int 型的零值。运行上述程序将 输出 [0 0 0]
。
以下定义了数组 balance 长度为 10 类型为 float32:
var balance [10] float32
数组的索引从 0
开始到 length - 1
结束。
2 初始化数组
先声明,再赋值:
var arr [5]int // 声明数组
arr[0] = 1 // 通过索引赋值
声明并赋值:
var arr = [5]int{1,2,3,4,5} // 全定义
arr := [5]int{1,2,3,4,5} // 简便定义
如果数组长度不确定,可以使用 ...
代替数组的长度,编译器会根据元素个数自行推断数组的长度:
var balance = [...]float32{1000.0, 2.0, 3.4, 7.0, 50.0}
或
balance := [...]float32{1000.0, 2.0, 3.4, 7.0, 50.0}
如果设置了数组的长度,我们还可以通过指定下标来初始化元素:
// 将索引为 1 和 3 的元素初始化
balance := [5]float32{1:2.0,3:7.0}
初始化数组中 {}
中的元素个数不能大于[]
中的数字。
如果忽略[]
中的数字不设置数组大小,Go 语言会根据元素的个数来设置数组的大小:
// []内可以不写,自动推算
arr := []int{1,2,3,4,5}
数组一经声明 ,长度固定,无法改变。
Go 中的数组是值类型而不是引用类型。这意味着当数组赋值给一个新的变量时,该变量会得到一个原始数组的一个副本。如果对新变量
进行更改,则不会影响原始数组。
同样,当数组作为参数传递给函数时,它们是按值传递,而原始数组保持不变。
3 访问数组元素
数组元素可以通过索引(位置)来读取。格式为数组名后加中括号,中括号中为索引的值(从0开始)。
arr := []int{1,2,3,4,5}
arr[3] = 100 // 索引取值
4 多维数组
Go 语言支持多维数组,以下为常用的多维数组声明方式:
var variable_name [SIZE1][SIZE2]...[SIZEN] variable_type
以下实例声明了三维的整型数组:
var threedim [5][10][4]int
多维数组可通过大括号来初始值。以下实例为一个 3 行 4 列的二维数组:
a := [3][4]int{
{0, 1, 2, 3} , /* 第一行索引为 0 */
{4, 5, 6, 7} , /* 第二行索引为 1 */
{8, 9, 10, 11}, // 这里要有逗号, /* 第三行索引为 2 */
}
5 数组长度
通过将数组作为参数传递给 len
函数,可以得到数组的长度。
arr := []int{1,2,3,4,5}
fmt.Println(len(arr))
6 数组的遍历
我们可以使用类c语言经典的遍历方法:
arr := [5]int{1,2,3,4,5}
for i :=0;i<len(arr);i++{
fmt.Println(i)
}
Go 提供了一种更好、更简洁的方法,通过使用 for
循环的 range
方法来遍历数组。range
返回索引和该索引处的值。让我们使用 range 重写上面的代码。我们还可以获取数组中所有元素的总和。
arr := [5]int{11,22,33,44,55}
for index,value :=range arr{ // range函数返回数组的索引,索引处的值
fmt.Println(index,value)
}
如果你只需要值并希望忽略索引,则可以通过用 _
空白标识符替换索引来执行。
本文来自博客园,作者:yyyz,转载请注明原文链接:https://www.cnblogs.com/yyyzyyyz/p/15443087.html