Go語言數組
數組是Go語言編程中最常用的數據結構之一。顧名思義,數組就是指一系列同一類型數據的集合。數組中包含的每個數據被稱為數組元素( element),一個數組包含的元素個數被稱為數組的長度。需要強調的一點是Go語言中數組的長度固定,無法擴容。
聲明定義
數組在定義初始化的時候,長度可以指定,也可以不指定讓編譯器自動推斷。幾種常見的數組定義初始化的方式如下:
var a [3]int //3個int型的數組,初始值是3個0,數組“零值”狀態
arr:=[5]int{1,2,3,4,5} //定義並初始化長度為5的數組
var array2 = [...]int{6, 7, 8} //不聲明長度
q := [...] int {1,2,3} //不聲明長度
r := [...] int {99:-1} //長度為100的數組,只有最后一個是-1,其他都是0
在聲明var arr1 [5]int中每個元素是一個整形值,當聲明數組時所有的元素都會被自動初始化為默認值 0。
數組元素訪問
Go語言中,可以使用數組下標來訪問數組中的元素。數組下標從0開始,len(arr)-1則表示最后一個元素的下標。
只有有效的索引可以被使用,當使用等於或者大於 len(arr)的索引時:如果編譯器可以檢測到,會給出索引超限的提示信息;如果檢測不到的話編譯會通過而運行時會 panic。
比起C語言,Go語言可以直接調用打印函數打印出整個數組。下面我們定義一個二維數組,然后來打印出數組長度和整個數組:
package main
import "fmt"
func main() {
myArray := [3][4]int{{1,2,3,4},{1,2,3,4},{1,2,3,4}}
//打印一維數組長度
fmt.Println(len(myArray))
//打印二維數組長度
fmt.Println(len(myArray[1]))
//打印整個二維數組
fmt.Println(myArray)
}
for-range結構
這是Go語言一種獨有的結構,可以用來遍歷訪問數組的元素。
for ix, value := range array01 {
...
}
第一個返回值 ix 是數組的索引,第二個是在該索引位置的值;他們都是僅在 for 循環內部可見的局部變量。value 只是 array01 某個索引位置的值的一個拷貝,不能用來修改 array01 該索引位置的值。例如:
package main
import "fmt"
func main() {
var arr1 [5]int
for i:=0; i < len(arr1); i++ {
arr1[i] = i * 2
}
for i:=0; i < len(arr1); i++ {
fmt.Printf("Array at index %d is %d\n", i, arr1[i])
}
當然,如果你在遍歷數組元素的時候,如果想遺棄索引id,可以直接把索引id標為下划線_。一個求數組里面的平均值的例子如下:
package main
import (
"fmt"
)
func main() {
sum := 0.0
var avg float64
xs := [6]float64{1, 2, 3, 4, 5, 6}
switch len(xs) {
case 0:
avg = 0
default:
for _, v := range xs {//下划線表示那個值舍去,即舍去下標索引
sum += v
}
avg = sum / float64(len(xs))
}
fmt.Println(avg)
}