Go | 初步了解「多維陣列」
💬 簡介
在程式語言中,多維陣列是由一個以上的陣列組成的陣列結構。這是一種強大的資料結構,用於表示矩陣、表格或任何多維資料。理解如何操作多維陣列可以幫助我們解決許多日常的程式設計問題。
本文將介紹多維陣列概念,並透過範例來展示如何操作這些資料結構。
圖片來源:Gophers(地鼠造型的原創者為 Renee French)
✨ 多維陣列的基本概念
多維陣列是陣列的陣列。你可以把它想像成一個矩陣或表格,其中的每一個元素本身也是一個陣列。Go 語言中的多維陣列是靜態的,這意味著你在宣告時就必須指定每一個維度的大小。
1️⃣ 宣告和初始化多維陣列
範例:宣告一個 2x3 的多維陣列
1
var matrix [2][3]int
📝 這樣我們創建了一個 2 行 3 列的陣列,每一個元素的初始值為 0。
範例:初始化多維陣列
1
2
3
4matrix := [2][3]int{
{1, 2, 3},
{4, 5, 6},
}📝 在這個範例中,我們創建了一個 2x3 的多維陣列並且進行初始化,包含數值
1, 2, 3, 4, 5, 6
。
2️⃣ 訪問多維陣列的元素
你可以使用兩個索引來訪問多維陣列的元素,第一個索引表示行,第二個索引表示列。
- 範例:訪問多維陣列元素
1
2fmt.Println(matrix[0][1]) // 輸出: 2
fmt.Println(matrix[1][2]) // 輸出: 6
🛠️ 範例:多維陣列操作
1️⃣ 遍歷多維陣列
我們可以使用巢狀的 for
迴圈來遍歷多維陣列的每一個元素。
- 範例:使用
for
迴圈遍歷多維陣列1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16package main
import "fmt"
func main() {
matrix := [2][3]int{
{1, 2, 3},
{4, 5, 6},
}
for i := 0; i < len(matrix); i++ {
for j := 0; j < len(matrix[i]); j++ {
fmt.Printf("matrix[%d][%d] = %d\n", i, j, matrix[i][j])
}
}
}📝 在這個範例中,我們使用巢狀的
for
迴圈來遍歷並印出多維陣列的每一個元素。
2️⃣ 使用 range
遍歷多維陣列
range
是 Go 中遍歷切片、陣列和其他資料結構的一個強大工具。它可以幫助我們簡化多維陣列的遍歷操作。
- 範例:使用 range 遍歷多維陣列
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16package main
import "fmt"
func main() {
matrix := [2][3]int{
{1, 2, 3},
{4, 5, 6},
}
for i, row := range matrix {
for j, value := range row {
fmt.Printf("matrix[%d][%d] = %d\n", i, j, value)
}
}
}📝 在這個範例中,我們使用
range
來遍歷多維陣列,i
是行索引,j
是列索引,而value
則是對應的陣列元素。
3️⃣ 修改多維陣列中的元素
你可以通過索引來修改多維陣列中的元素。
- 範例:修改多維陣列元素
1
2
3
4
5
6
7
8
9
10
11
12
13package main
import "fmt"
func main() {
matrix := [2][3]int{
{1, 2, 3},
{4, 5, 6},
}
matrix[0][1] = 100 // 修改第一行第二列的元素
fmt.Println(matrix) // 輸出: [[1 100 3] [4 5 6]]
}📝 在這個範例中,我們將
matrix[0][1]
的值修改為100
,並印出修改後的多維陣列。
💡 進階使用
↔️ 多維陣列與多維切片的區別
雖然多維陣列在 Go 中十分常用,但如果你需要處理變化大小的多維資料結構,則可能會使用多維切片。多維切片的大小和結構是動態可變的,而多維陣列在創建時的大小則是固定的。
- 範例:多維切片
1
2
3
4
5matrix := [][]int{
{1, 2, 3},
{4, 5},
{6, 7, 8},
}📝 在這個範例中,我們創建了一個多維切片,它的每一行的長度是動態的。
📢 在後面章節將會介紹到切片與多維切片。
🚀 陣列與多維陣列的限制與優化
- 固定大小的多維陣列:多維陣列的大小是固定的,這意味著在創建時你需要確定每個維度的大小。如果資料結構的大小不確定,則可以考慮使用切片。
- 性能考量:由於 Go 中的多維陣列是靜態分配的,所以它們在記憶體中是連續儲存的,這使得它們在處理大資料時具有優勢。然而,靈活性較差,適合需要固定大小的情境。
🎯總結
多維陣列是一個強大的資料結構,它可以幫助我們表示各種複雜的資料結構。理解如何宣告、初始化和操作多維陣列將有助於你解決更複雜的程式設計問題。
最後建議回顧一下 Go | 菜鳥教學 目錄,了解其章節內容。
註:以上參考了
Go
Go-Array types