课程表

Go语言课程

工具箱
速查手册

Go 语言数组

当前位置:免费教程 » 程序设计 » Go语言

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

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

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

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


声明数组

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

  1. var variable_name [SIZE] variable_type

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

  1. var balance [10] float32

初始化数组

以下演示了数组初始化:

  1. var balance = [5]float32{1000.0, 2.0, 3.4, 7.0, 50.0}

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

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

  1. var balance = [...]float32{1000.0, 2.0, 3.4, 7.0, 50.0}

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

  1. balance[4] = 50.0

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


访问数组元素

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

  1. float32 salary = balance[9]

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

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

  1. package main
  2.  
  3. import "fmt"
  4.  
  5. func main() {
  6. var n [10]int /* n 是一个长度为 10 的数组 */
  7. var i,j int
  8.  
  9. /* 为数组 n 初始化元素 */
  10. for i = 0; i < 10; i++ {
  11. n[i] = i + 100 /* 设置元素为 i + 100 */
  12. }
  13.  
  14. /* 输出每个数组元素的值 */
  15. for j = 0; j < 10; j++ {
  16. fmt.Printf("Element[%d] = %d\n", j, n[j] )
  17. }
  18. }

在线运行实例

以上实例执行结果如下:

  1. Element[0] = 100
  2. Element[1] = 101
  3. Element[2] = 102
  4. Element[3] = 103
  5. Element[4] = 104
  6. Element[5] = 105
  7. Element[6] = 106
  8. Element[7] = 107
  9. Element[8] = 108
  10. Element[9] = 109

更多内容

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

内容 描述
多维数组 Go 语言支持多维数组,最简单的多维数组是二维数组
向函数传递数组 你可以像函数传递数组参数

多维数组

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

  1. var variable_name [SIZE1][SIZE2]...[SIZEN] variable_type

以下实例声明了三维的整型数组:

  1. var threedim [5][10][4]int

二维数组

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

  1. var arrayName [ x ][ y ] variable_type

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

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


初始化二维数组

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

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

访问二维数组

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

  1. int val = a[2][3]

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

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

  1. package main
  2.  
  3. import "fmt"
  4.  
  5. func main() {
  6. /* 数组 - 5 行 2 列*/
  7. var a = [5][2]int{ {0,0}, {1,2}, {2,4}, {3,6},{4,8}}
  8. var i, j int
  9.  
  10. /* 输出数组元素 */
  11. for i = 0; i < 5; i++ {
  12. for j = 0; j < 2; j++ {
  13. fmt.Printf("a[%d][%d] = %d\n", i,j, a[i][j] )
  14. }
  15. }
  16. }

在线运行实例

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

  1. a[0][0] = 0
  2. a[0][1] = 0
  3. a[1][0] = 1
  4. a[1][1] = 2
  5. a[2][0] = 2
  6. a[2][1] = 4
  7. a[3][0] = 3
  8. a[3][1] = 6
  9. a[4][0] = 4
  10. a[4][1] = 8

向函数传递数组

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

方式一

形参设定数组大小:

  1. void myFunction(param [10]int)
  2. {
  3. .
  4. .
  5. .
  6. }

方式二

形参未设定数组大小:

  1. void myFunction(param []int)
  2. {
  3. .
  4. .
  5. .
  6. }

实例

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

  1. func getAverage(arr []int, size int) float32
  2. {
  3. var i int
  4. var avg, sum float32
  5.  
  6. for i = 0; i < size; ++i {
  7. sum += arr[i]
  8. }
  9.  
  10. avg = sum / size
  11.  
  12. return avg;
  13. }

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

  1. package main
  2.  
  3. import "fmt"
  4.  
  5. func main() {
  6. /* 数组长度为 5 */
  7. var balance = []int {1000, 2, 3, 17, 50}
  8. var avg float32
  9.  
  10. /* 数组作为参数传递给函数 */
  11. avg = getAverage( balance, 5 ) ;
  12.  
  13. /* 输出返回的平均值 */
  14. fmt.Printf( "平均值为: %f ", avg );
  15. }
  16. func getAverage(arr []int, size int) float32 {
  17. var i,sum int
  18. var avg float32
  19.  
  20. for i = 0; i < size;i++ {
  21. sum += arr[i]
  22. }
  23.  
  24. avg = float32(sum / size)
  25.  
  26. return avg;
  27. }

在线运行实例

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

  1. 平均值为: 214.000000

以上实例中我们使用的形参并为设定数组大小。

转载本站内容时,请务必注明来自W3xue,违者必究。
 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号