Go语言专题(四):数组

Go语言数组

Go 语言提供了数组类型的数据结构。

数组是具有相同唯一类型的一组已编号且长度固定的数据项序列,这种类型可以是任意的原始类型例如整形、字符串或者自定义类型。

相对于去声明number0, number1, ..., and number99的变量,使用数组形式numbers[0], numbers[1] ..., numbers[99]更加方便且易于扩展。

数组元素可以通过索引(位置)来读取(或者修改),索引从0开始,第一个元素索引为 0,第二个索引为 1,以此类推。

Go语言专题(四):数组

Go 语言数组声明需要指定元素类型及元素个数,语法格式如下:

varvariable_name[SIZE] variable_type

以上为一维数组的定义方式。数组长度必须是整数且大于 0。例如以下定义了数组 balance 长度为 10 类型为 float32:

varbalance[10] float32

初始化数组

以下演示了数组初始化:

varbalance=[5]float32{1000.0, 2.0, 3.4, 7.0, 50.0}

初始化数组中 {} 中的元素个数不能大于 [] 中的数字。

如果忽略 [] 中的数字不设置数组大小,Go 语言会根据元素的个数来设置数组的大小:

varbalance=[...]float32{1000.0, 2.0, 3.4, 7.0, 50.0}

该实例与上面的实例是一样的,虽然没有设置数组的大小。

balance[4] =50.0

以上实例读取了第五个元素。数组元素可以通过索引(位置)来读取(或者修改),索引从0开始,第一个元素索引为 0,第二个索引为 1,以此类推。

Go语言专题(四):数组

访问数组元素

数组元素可以通过索引(位置)来读取。格式为数组名后加中括号,中括号中为索引的值。例如:

varsalaryfloat32=balance[9]

以上实例读取了数组balance第10个元素的值。

以下演示了数组完整操作(声明、赋值、访问)的实例:

packagemain

import"fmt"

funcmain() {
varnumbers[5] int

fori:=0; i numbers[i] =i+10
}

fori:=0; i fmt.Printf("numbers[%d] = %d\n",i,numbers[i]);
}
}

以上程序运行结果为:

numbers[0] =10
numbers[1] =11
numbers[2] =12
numbers[3] =13

numbers[4] =14

数组对 Go 语言来说是非常重要的,以下我们将介绍数组更多的内容:

多维数组

Go 语言支持多维数组,以下为常用的多维数组声明方式:

varvariable_name[SIZE1][SIZE2]...[SIZEN] variable_type
varthreedim[5][10][4]int

二维数组

二维数组是最简单的多维数组,二维数组本质上是由一维数组组成的。二维数组定义方式如下:

vararrayName[ x][ y] variable_type

variable_type 为 Go 语言的数据类型,arrayName 为数组名,二维数组可认为是一个表格,x 为行,y 为列,下图演示了一个二维数组 a 为三行四列:

Go语言专题(四):数组

二维数组中的元素可通过 a i 来访问。

初始化二维数组

多维数组可通过大括号来初始值。以下实例为一个 3 行 4 列的二维数组:

a=[3][4]int{ 
{0, 1, 2, 3} , /* 第一行索引为 0 */
{4, 5, 6, 7} , /* 第二行索引为 1 */
{8, 9, 10, 11}, /* 第三行索引为 2 */
}

注意:以上代码中倒数第二行的 } 必须要有逗号,因为最后一行的 } 不能单独一行,也可以写成这样:

a=[3][4]int{ 
{0, 1, 2, 3} , /* 第一行索引为 0 */
{4, 5, 6, 7} , /* 第二行索引为 1 */
{8, 9, 10, 11}} /* 第三行索引为 2 */

访问二维数组

二维数组通过指定坐标来访问。如数组中的行索引与列索引,例如:

intval=a[2][3] 

以上实例访问了二维数组 val 第三行的第四个元素。

二维数组可以使用循环嵌套来输出元素:

packagemain

import"fmt"

funcmain() {
/* 数组 - 5 行 2 列*/
vara=[5][2]int{ {0,0}, {1,2}, {2,4}, {3,6},{4,8}}
vari, jint

/* 输出数组元素 */
for i=0; i<5; i++{
forj=0; j<2; j++{
fmt.Printf("a[%d][%d] = %d\n", i,j, a[i][j] )
}
}
}

以上实例运行输出结果为:

a[0][0] = 0
a[0][1] = 0
a[1][0] = 1
a[1][1] = 2
a[2][0] = 2
a[2][1] = 4
a[3][0] = 3
a[3][1] = 6
a[4][0] = 4
a[4][1] = 8

Go 语言向函数传递数组

如果你想向函数传递数组参数,你需要在函数定义时,声明形参为数组,我们可以通过以下两种方式来声明:

方式一

形参设定数组大小:

voidmyFunction(param[10]int)
{
.
.
.
}

方式二

形参未设定数组大小:

voidmyFunction(param[]int)
{
.
.
.
}

让我们看下以下实例,实例中函数接收整型数组参数,另一个参数指定了数组元素的个数,并返回平均值:

funcgetAverage(arr[]int, sizeint) float32
{
variint
varavg, sumfloat32

fori=0; i<size> sum+=arr[i]
}

avg=sum/size

returnavg;
}

/<size>

接下来我们来调用这个函数:

packagemain

import"fmt"

funcmain() {
/* 数组长度为 5 */
var balance=[]int{1000, 2, 3, 17, 50}
varavgfloat32

/* 数组作为参数传递给函数 */
avg=getAverage( balance, 5) ;

/* 输出返回的平均值 */
fmt.Printf( "平均值为: %f ", avg);
}
funcgetAverage(arr[]int, sizeint) float32{
vari,sumint
varavgfloat32

fori=0; i<size> sum+=arr[i]
}

avg=float32(sum) /float32(size)

returnavg;
}
/<size>

以上实例执行输出结果为:

平均值为: 214.399994


分享到:


相關文章: