Go 语言数组
Go 语言提供了数组类型的数据结构。
数组是具有相同唯一类型的一组已编号且长度固定的数据项序列,这种类型可以是任意的原始类型例如整形、字符串或者自定义类型。
相对于去声明number0, number1, ..., and number99的变量,使用数组形式numbers[0], numbers[1] ..., numbers[99]更加方便且易于扩展。
数组元素可以通过索引(位置)来读取(或者修改),索引从0开始,第一个元素索引为 0,第二个索引为 1,以此类推。
声明数组
Go 语言数组声明需要指定元素类型及元素个数,语法格式如下
var array_name [SIZE] array_type
以上为一维数组的定义方式。数组长度必须是整数且大于 0。例如以下定义了数组 balance 长度为 10 类型为 float32:
var blance [5] float32
//如果不给初始化的值,默认就用根据数据类型填充数组的元素,float32的默认填充5个大鸭蛋([0 0 0 0 0])
初始化数组
以下演示了数组初始化:
var blance = [5] float32 {1000.0, 2.0, 3.4, 7.0, 50.0}
//给了初始化的值以后,数组中的元素为[1000 2 3.4 7 50]
注意:
- 初始化数组中 {} 中的元素个数不能大于 [] 中的数字。
- 如果忽略 [] 中的数字不设置数组大小,Go 语言会根据元素的个数来设置数组的大小:[...]
package main import ( "fmt" ) func main() { //会自动计算初始化的值得个数 var blance = [...] float32 {1000.0, 2.0, 3.4, 7.0, 50.0} //len函数是内部函数,会打印初始化数组中的元素个数 fmt.Println(len(blance)) }
修改数组中第一个索引的值(数组的索引从0开始计算)
blance[1] = 101.21 //数组中的第二个元素就会被重新赋值为101.21,新数组的结果为[1000 101.21 3.4 7 50]
访问数组中的值(不能超出数组的个数,不然会报错)
func main() { //会自动计算初始化的值得个数 var blance = [...] float32 {1000.0, 2.0, 3.4, 7.0, 50.0} blance[1] = 101.21 //len函数是内部函数,会打印初始化数组中的元素个数 fmt.Println(len(blance)) fmt.Println(blance[4]) /*超过索引的最大取值了,报错了invalid array index 8 (out of bounds for 5-element array) fmt.Println(blance[8]) */ }
以下演示了数组完整操作(声明、赋值、访问)的实例:
1 package main 2 3 import ( 4 "fmt" 5 ) 6 7 func main(){ 8 //创建局部数组变量blance 9 var blance = [...] string {"a", "b", "c", "d","e","f"} 10 //计算数组的个数 11 count := len(blance) 12 //初始化数组n 13 var n [6] int 14 for i := 0; i < count; i++{ 15 //通过for循环,给n的索引赋值 16 n[i] = i + 10 17 } 18 19 //访问新创建的n数组里面的值 20 for index,v := range n{ 21 fmt.Printf("n数组中的第 %d 个索引为: %d \n",index,v) 22 } 23 }
以上代码输出的结果为:
n数组中的第 0 个索引为: 10
n数组中的第 1 个索引为: 11
n数组中的第 2 个索引为: 12
n数组中的第 3 个索引为: 13
n数组中的第 4 个索引为: 14
n数组中的第 5 个索引为: 15
Go 语言多维数组
Go 语言支持多维数组,以下为常用的多维数组声明方式:
var array_name [SIZE1][SIZE2]...[SIZEN] array_type
二维数组
二维数组是最简单的多维数组,二维数组本质上是由一维数组组成的。二维数组定义方式如下:
var arrayName [ x ][ y ] array_type
array_type 为 Go 语言的数据类型,arrayName 为数组名,二维数组可认为是一个表格,x 为行,y 为列,下图演示了一个二维数组 a 为三行四列:
二维数组中的元素可通过 a[ i ][ j ] 来访问。
初始化二位数组:
func main(){ //初始化二维数组 var threedim = [2][5] int { {1,2,3,4,5}, {6,7,8,9,10}, } fmt.Println(threedim) }
获取第二维数组中第一个元素中的第四个值
func main(){ //初始化二维数组,索引从0开始,第一个元素索引为0,第一个元素中第三个索引上的值 var threedim = [2][5] int { {1,2,3,4,5}, {6,7,8,9,10}, } fmt.Println(threedim[0][3]) }
利用循环输出二维数组的对应索引上的值
1 package main 2 3 import ( 4 "fmt" 5 ) 6 7 func main(){ 8 //初始化二维数组 9 var threedim = [3][5] int { 10 {1,2,3,4,5}, 11 {6,7,8,9,10}, 12 {11,12,13,14,15}, 13 } 14 count := len(threedim) 15 for i := 0; i< count ; i++{ 16 inner_count := len(threedim[i]) 17 for j := 0; j < inner_count; j++{ 18 fmt.Printf("threedim [%d][%d] = %d\n", i,j,threedim[i][j]) 19 } 20 21 } 22 }
以上代码返回的结果为:
threedim [0][0] = 1 threedim [0][1] = 2 threedim [0][2] = 3 threedim [0][3] = 4 threedim [0][4] = 5 threedim [1][0] = 6 threedim [1][1] = 7 threedim [1][2] = 8 threedim [1][3] = 9 threedim [1][4] = 10 threedim [2][0] = 11 threedim [2][1] = 12 threedim [2][2] = 13 threedim [2][3] = 14 threedim [2][4] = 15
Go 语言向函数传递数组
如果你想向函数传递数组参数,你需要在函数定义时,声明形参为数组
栗子~
1 package main 2 3 import ( 4 "fmt" 5 ) 6 7 func getAverage(arr [] int, size int) float32 { 8 var sum int 9 var avg float32 10 //循环获取arr数组的元素 11 for i := 0; i < size; i++ { 12 //计算每个元素相加的和 13 sum += arr[i] 14 } 15 //计算平均数 16 avg = float32(sum/size) 17 return avg 18 } 19 20 func main() { 21 //初始化数组 22 var blance = [] int {100,50,42,1,4} 23 //调用计算平均数的数组 24 fmt.Println(getAverage(blance,5)) 25 }
以上代码执行的返回结果:
39
不行 不行,宝宝没办法忍了....go的语法太TMD的egg pain....,我要用Python搞一发~~,快来看Python的
1 #!/usr/bin/env python3 2 #_*_coding:utf-8_*_ 3 4 __author__ = 'demon' 5 6 array = [100,50,42,1,4] 7 8 def avg(array): 9 sum = 0 10 for i in array: 11 sum += i 12 avg_number = sum / len(array) 13 return avg_number 14 15 16 print(avg(array))
更简单的写法~
1 #!/usr/bin/env python3 2 #_*_coding:utf-8_*_ 3 4 __author__ = 'demon' 5 6 array = [100,50,42,1,4] 7 8 print(sum(array)/len(array))
以上代码执行的结果:
39.4