Loading

数组

八、数组

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)
}

如果你只需要值并希望忽略索引,则可以通过用 _ 空白标识符替换索引来执行。

posted @ 2021-10-23 14:09  yyyz  阅读(168)  评论(0编辑  收藏  举报