概述
陣列
是具有相同資料型別的一組長度固定的資料項序列,分配在連續的記憶體地址上。其中資料型別可以是整型、布林型等基礎資料型別,也可以是自定義資料型別。陣列長度
必須是一個常量表示式,並且必須是一個非負數。同時,陣列長度
也是陣列型別的一部分, 例如 [3]int
和 [5]int
是不同的型別。
語法規則
在不確定陣列元素的具體數量時,可以透過指定 長度
分配空間。
var 變數名稱 [長度]資料型別
# 例子
var arr [5]int
在確定陣列元素的具體數量以及值時,可以省略 長度
變數,這種方式稱為 陣列常量
。
var 變數名稱 [...]資料型別{值1, 值2, 值3...}
# 例子
var arr [...]int{v1, v2, v3...}
獲取值/改變值
和其他程式語言一樣,陣列的元素可以透過 索引
來獲取或修改,索引
從 0
開始。
package main
func main() {
var arr [3]int
arr[0] = 100 // 為陣列第 1 個元素賦值
arr[1] = 200 // 為陣列第 2 個元素賦值
arr[2] = 300 // 為陣列第 3 個元素賦值
println(arr[0]) // 輸出陣列第 1 個元素
println(arr[1]) // 輸出陣列第 2 個元素
println(arr[2]) // 輸出陣列第 3 個元素
var arr2 = [...]int{400, 500, 600} // 使用 陣列常量 定義
println(arr2[0]) // 輸出陣列第 1 個元素
println(arr2[1]) // 輸出陣列第 2 個元素
println(arr2[2]) // 輸出陣列第 3 個元素
}
// $ go run main.go
// 輸出如下
/**
100
200
300
400
500
600
*/
獲取陣列長度
透過 len()
函式獲取。
package main
import "fmt"
func main() {
var arr [3]int
arr[0] = 100 // 為陣列第 1 個元素賦值
arr[1] = 200 // 為陣列第 2 個元素賦值
arr[2] = 300 // 為陣列第 3 個元素賦值
fmt.Printf("陣列長度 = %d\n", len(arr))
}
// $ go run main.go
// 輸出如下
/**
陣列長度 = 3
*/
遍歷陣列
普通迴圈
package main
import "fmt"
func main() {
var arr [3]int
arr[0] = 100 // 為陣列第 1 個元素賦值
arr[1] = 200 // 為陣列第 2 個元素賦值
arr[2] = 300 // 為陣列第 3 個元素賦值
for i := 0; i < len(arr); i++ {
fmt.Printf("index = %d, val = %d\n", i, arr[i])
}
}
// $ go run main.go
// 輸出如下
/**
index = 0, val = 100
index = 1, val = 200
index = 2, val = 300
*/
range 迴圈
package main
import "fmt"
func main() {
var arr [3]int
arr[0] = 100 // 為陣列第 1 個元素賦值
arr[1] = 200 // 為陣列第 2 個元素賦值
arr[2] = 300 // 為陣列第 3 個元素賦值
for i, v := range arr {
fmt.Printf("index = %d, val = %d\n", i, v)
}
}
// $ go run main.go
// 輸出如下
/**
index = 0, val = 100
index = 1, val = 200
index = 2, val = 300
*/
多維陣列
將多個一維陣列進行組裝,得到一個多維陣列。
package main
import "fmt"
func main() {
var arr [3][3]int // 定義一個 3 行 3 列的二維陣列
// 陣列元素初始化
for i := 0; i < len(arr); i++ {
for j := 0; j < len(arr[i]); j++ {
arr[i][j] = i*3 + j + 1
}
}
// 初始化完成後,陣列元素如下
// -------------------
// | 1 | 2 | 3 |
// -------------------
// | 4 | 5 | 6 |
// -------------------
// | 7 | 8 | 8 |
// -------------------
// 輸出陣列元素
for i := 0; i < len(arr); i++ {
for j := 0; j < len(arr[i]); j++ {
fmt.Printf("第 %d 行,第 %d 列 的值 = %d\n", i+1, j+1, arr[i][j])
}
}
}
// $ go run main.go
// 輸出如下
/**
第 1 行,第 1 列 的值 = 1
第 1 行,第 2 列 的值 = 2
第 1 行,第 3 列 的值 = 3
第 2 行,第 1 列 的值 = 4
第 2 行,第 2 列 的值 = 5
第 2 行,第 3 列 的值 = 6
第 3 行,第 1 列 的值 = 7
第 3 行,第 2 列 的值 = 8
第 3 行,第 3 列 的值 = 9
*/