# Day 9 : Golang array <style> .important{ color:red } </style> ## 前言 當我們儲存一堆相同類型的資料,在JavaScript中可能會用Array,,在Python中會用到list,在Golang裡面則可能用到array, slice和map這三種集合(collection types),接下來幾天也會複習如何用這三種方式組織資料。 ## Array Array是由<span class='important'>固定大小</span>且<span class='important'>相同型別</span>元素所組成的集合,在一開始定義的時候就需要定義**長度**和**型別**。以下面圖一為例,透過var a = [5]int{10,30,57,32,77}進行宣告變數與初始化,其長度為5,資料型別為int,此外在初始化完後,亦可以透過使用`index`來**存取**裡面的元素(注意這是存取,如果是要新增或是修改應該要使用slice)。 ![](https://i.imgur.com/8hF0Kqu.png) (圖一,自行繪製) ## 實作 接下來透過不同的宣告方式操作一些常用的array儲存的資料。 如果不想定義初始化的值,可以在長度的地方寫成`...`三個點,這樣會根據初始化的值自動形成該長度的陣列,如下面的a會形成長度為7的array。 a2則是在索引9定義為1,前面index0~8因為沒有定義,會形成zero value,故長度為10 ```go= func main() { var a =[...]int{1,2,77,4,23,6,89} fmt.Printf("長度為 : %v",len(a)) // 長度為 : 7 var a2 =[...]int{9:1} fmt.Printf("長度為 : %v",len(a2)) // 長度為 : 10 fmt.Println(a2) // [0 0 0 0 0 0 0 0 0 1] } ``` 當我們宣告變數,但沒有進行初始化賦值的時候,長度的地方就不可以寫成`...`,必須給定一固定數字,並透過索引進行賦值,如沒有賦值會呈現該型別的zero value。 ```go= func main() { var a =[5]int{} a[0]=5 a[2]=7 fmt.Println(a) // [5 0 7 0 0] } ``` 當然我們也可以利用迴圈來iterate array,在Go裡面只有for迴圈,沒有while迴圈,在此透過兩種for迴圈的方式進行iterate。 ```go= func main() { a :=[...]int{5,6,7,8} for i:=0 ; i <len(a); i++{ a[i] *= a[i] fmt.Printf("index %v becomes %v \n",i,a[i]) } for i, val := range a { a[i] = val * val fmt.Printf("index %v becomes %v \n", i, a[i]) } } //index 0 becomes 25 //index 1 becomes 36 //index 2 becomes 49 //index 3 becomes 64 //index 0 becomes 625 //index 1 becomes 1296 //index 2 becomes 2401 //index 3 becomes 4096 ``` array的長度在一開始宣告如果不是用`...`也不是直接寫數字,就必須要用常數固定 ```go= func main(){ const length int =5 // 可以執行 // length := 5 // 不可以執行,因為是變數 a := [length]int{1, 56, 78, 98, 100} for _, v := range a{ fmt.Printf("%v ", v) } } ``` 建立多維陣列,就像一維一樣,如果沒有定義就是呈現zero value ```go= func main(){ a := [4][5]float64{ {1,3}, {5,10,15,20,25}, {-1,2.3,9.6,7.7}, } fmt.Println(a) //[[1 3 0 0 0] [5 10 15 20 25] [-1 2.3 9.6 7.7 0] [0 0 0 0 0]] } ``` ## References 1. https://ithelp.ithome.com.tw/articles/10234744 2. https://calvertyang.github.io/2019/11/12/working-with-arrays-in-golang/ ###### tags: `About Go`