八、數組
Go 語言提供了數組類型的數據結構。
數組是同一類型元素的集合,這種類型可以是任意的原始類型例如整型、字符串或者自定義類型。例如,整數集合 5,8,9,79,76 形成一個
數組。Go 語言中不允許混合不同類型的元素,例如包含字符串和整數的數組。(當然,如果是 interface{} 類型數組,可以包含任意類
型)
1 聲明數組
Go 語言數組聲明需要指定元素類型及元素個數,語法格式如下:
var variable_name [SIZE] variable_type
以上為一維數組的定義方式。舉例:
var a [3]int
var a[3]int 聲明了一個長度為 3 的整型數組。數組中的所有元素都被自動賦值為數組類型的零值,在這種情況下,a
是一個整型數組,
因此 a
的所有元素都被賦值為 0
,即 int 型的零值。運行上述程序將 輸出 [0 0 0]
。
以下定義了數組 balance 長度為 10 類型為 float32:
var balance [10] float32
數組的索引從 0
開始到 length - 1
結束。
2 初始化數組
先聲明,再賦值:
var arr [5]int // 聲明數組
arr[0] = 1 // 通過索引賦值
聲明並賦值:
var arr = [5]int{1,2,3,4,5} // 全定義
arr := [5]int{1,2,3,4,5} // 簡便定義
如果數組長度不確定,可以使用 ...
代替數組的長度,編譯器會根據元素個數自行推斷數組的長度:
var balance = [...]float32{1000.0, 2.0, 3.4, 7.0, 50.0}
或
balance := [...]float32{1000.0, 2.0, 3.4, 7.0, 50.0}
如果設置了數組的長度,我們還可以通過指定下標來初始化元素:
// 將索引為 1 和 3 的元素初始化
balance := [5]float32{1:2.0,3:7.0}
初始化數組中 {}
中的元素個數不能大於[]
中的數字。
如果忽略[]
中的數字不設置數組大小,Go 語言會根據元素的個數來設置數組的大小:
// []內可以不寫,自動推算
arr := []int{1,2,3,4,5}
數組一經聲明 ,長度固定,無法改變。
Go 中的數組是值類型而不是引用類型。這意味着當數組賦值給一個新的變量時,該變量會得到一個原始數組的一個副本。如果對新變量
進行更改,則不會影響原始數組。
同樣,當數組作為參數傳遞給函數時,它們是按值傳遞,而原始數組保持不變。
3 訪問數組元素
數組元素可以通過索引(位置)來讀取。格式為數組名后加中括號,中括號中為索引的值(從0開始)。
arr := []int{1,2,3,4,5}
arr[3] = 100 // 索引取值
4 多維數組
Go 語言支持多維數組,以下為常用的多維數組聲明方式:
var variable_name [SIZE1][SIZE2]...[SIZEN] variable_type
以下實例聲明了三維的整型數組:
var threedim [5][10][4]int
多維數組可通過大括號來初始值。以下實例為一個 3 行 4 列的二維數組:
a := [3][4]int{
{0, 1, 2, 3} , /* 第一行索引為 0 */
{4, 5, 6, 7} , /* 第二行索引為 1 */
{8, 9, 10, 11}, // 這里要有逗號, /* 第三行索引為 2 */
}
5 數組長度
通過將數組作為參數傳遞給 len
函數,可以得到數組的長度。
arr := []int{1,2,3,4,5}
fmt.Println(len(arr))
6 數組的遍歷
我們可以使用類c語言經典的遍歷方法:
arr := [5]int{1,2,3,4,5}
for i :=0;i<len(arr);i++{
fmt.Println(i)
}
Go 提供了一種更好、更簡潔的方法,通過使用 for
循環的 range
方法來遍歷數組。range
返回索引和該索引處的值。讓我們使用 range 重寫上面的代碼。我們還可以獲取數組中所有元素的總和。
arr := [5]int{11,22,33,44,55}
for index,value :=range arr{ // range函數返回數組的索引,索引處的值
fmt.Println(index,value)
}
如果你只需要值並希望忽略索引,則可以通過用 _
空白標識符替換索引來執行。