數組


八、數組

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)
}

如果你只需要值並希望忽略索引,則可以通過用 _ 空白標識符替換索引來執行。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM