Go语言数组

2020-12-22 15:08:44 浏览数 (1)

数组是线性表的一种实现,是最基本的数据结构之一。它以连续的地址空间存储相同类型的元素,按索引访问数组元素。优点是可以实现随机存取O(1),缺点是删除和添加一个元素需要在操作位置后大量移动元素O(n)

Go语言也提供了数组这一类型,它可以存储整形、浮点型、字符串或者其他自定义类型。在概念上,Go语言的数组同其他语言的数组没有区别。

声明数组语法如下:

代码语言:javascript复制
var array_name [SIZE]variable_type

Go数组声明的时候一定要指定数组长度。如果不指定数组长度的,声明的不是数组而是切片

实例:

代码语言:javascript复制
var nums [10]int

同其他语言,数组声明的同时,可以使用花括号指定元素值来初始化数组,如下:

代码语言:javascript复制
var nums = [10]int {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}

同其他语言,可以通过数组下标访问数组元素:

代码语言:javascript复制
var res int = nums[5]
num := nums[10]

同样支持多维数组,语法如下:

代码语言:javascript复制
var array_name [SIZE1][SIZE2]...[SIZEN] variable_type

初始化和访问二维数组同上,只不过要使用两个下标,实例如下:

代码语言:javascript复制
package main

import "fmt"

func main() {
	var board = [4][4]int {{0, 0, 0, 0}, {1, 0, 0, 0}, {0, 1, 0, 1}, {0, 0, 0, 0}}

	for i:=0; i<len(board); i   {
		for j:=0; j< len(board[0]); j   {
			if board[i][j] == 1 {
				fmt.Printf("坐标(%d,%d)已经被访问过n", i, j)
			}
		}
	}
}

// 坐标(1,0)已经被访问过
// 坐标(2,1)已经被访问过
// 坐标(2,3)已经被访问过
作为函数参数传递

在函数定义时,指定形参为数组,写法上需要写明数组大小,不写明数据大小传递的是切片,这是不一样的。

语法如下:

代码语言:javascript复制
func function_name(param [10]int) // param是一个数组

func function_name(param []int)   // param是一个切片

实例:

代码语言:javascript复制
package main

import "fmt"

func avg(grade[5] int) {
	sum := 0
	for i:=0; i< len(grade); i   {
		sum  = grade[i]
	}
	fmt.Printf("平均成绩为:%d", sum/len(grade))
}

func main() {
	grade := [5]int {99, 78, 69, 89, 90}
	avg(grade)
}

// 平均成绩为:85

该例在avg函数定义的时候,如果不声明长度为5,会报错cannot use grade (type [5]int) as type []int in argument to avg,因此推荐指明数组长度。

0 人点赞