Go語言中陣列的使用
阿新 • • 發佈:2018-11-13
文章目錄
1 概述
陣列,切片,map是容器資料型別。都是可以儲存多個值的符合型別。
其中陣列是相同型別的一組已編號且長度固定的資料項序列,不用型別和長度是不同的資料型別,例如[5]int, [3]int, [5]byte是不同的型別。
2 定義語法
// 定義長度和型別,預設使用型別零值進行初始化 var a1 [10]int // 定義長度和型別,同時初始化部分(全部)元素 // 元素不夠從前到後進行初始化 var a2 = [10]int{1, 2, 3, 4, 5} // 不指定長度,指定型別。使用初始值確定長度 // 有幾個初始值,長度就是幾 var a3 = [...]int{1, 2, 3, 4, 5, 6} // 通過索引確定元素值 var a4 = [10]int{0: 1, 3: 2, 5: 3, 4, 5}
3 []索引訪問
索引(index),是從 0 開始,加 1 遞增的。使用 [] 訪問。
arr[0] // 陣列的第一個元素
arr[len(arr)-1] // 陣列的最後一個元素
4 陣列是值型別
陣列為值型別,賦值時會生成新拷貝。這個可能和你熟悉的語言不同,稍稍留意。
5 len() 長度
統計元素個數,一維的統計。如果是多維,僅統計一維元素數量。
6 陣列遍歷
使用 迴圈索引 或者 for range 的語法完成遍歷。
// 迴圈索引 var arr = [...]string{"a", "b", "c", "d", "e", "f"} for i, l := 0, len(arr); i < l; i++ { fmt.Println(arr[i]) } // for range var arr = [...]string{"a", "b", "c", "d", "e", "f", "g", "h"} for i, v := range arr { fmt.Println(i, v) }
7 多維陣列
陣列元素的值可以是陣列型別,稱之為多維陣列,要求內部陣列的長度相同。以二維陣列為例,使用[][]來定義,可以將二維陣列想象成一個行列表格。
var a1 [3][5]int
var a2 = [3][5]string{{"a", "b", "c", "d", "e"}, {"f", "g", "h", "i", "j"}, {"k", "l", "m", "n", "o"}}
以上程式碼就定了二維陣列,第一個使用預設值初始,第二個手動填充。
演示如下
使用雙層迴圈可以遍歷二維陣列:
// 迴圈索引 // 行座標索引 for i := 0; i < 3; i++ { // 列座標索引 for j := 0; j < 5; j++ { fmt.Print(a2[i][j], " ") } fmt.Println() } // for range for _, row := range a2 { // fmt.Println(i, row) for _, value := range row { fmt.Print(value, " ") } fmt.Println() }
8 陣列傳參
陣列是值型別,傳參時會發生值拷貝,當使用大陣列時,記憶體的消耗需要考慮。可以考慮使用陣列指標或者切片型別。
func FuncName(p *[9999]float64) {
}
9 ==,!= 陣列間的比較
兩個陣列的型別,長度,元素值,順序都相同,認為兩個陣列相等。
[3]{1, 2, 3} == [4]{1, 2, 3, 4}
// false
[3]{1, 2, 3} == [3]{3, 2, 1}
// false
[3]{1, 2, 3} == [3]{1, 2, 3}
// true
完!
原文出自:小韓說課
微信關注:小韓說課