Like Share Discussion Bookmark Smile

J.J. Huang   2025-02-15   Getting Started Golang 02.資料結構   瀏覽次數:次   DMCA.com Protection Status

Go | 初步了解「多維陣列」

💬 簡介

在程式語言中,多維陣列是由一個以上的陣列組成的陣列結構。這是一種強大的資料結構,用於表示矩陣、表格或任何多維資料。理解如何操作多維陣列可以幫助我們解決許多日常的程式設計問題。

本文將介紹多維陣列概念,並透過範例來展示如何操作這些資料結構。

圖片來源:Gophers(地鼠造型的原創者為 Renee French)


✨ 多維陣列的基本概念

多維陣列是陣列的陣列。你可以把它想像成一個矩陣或表格,其中的每一個元素本身也是一個陣列。Go 語言中的多維陣列是靜態的,這意味著你在宣告時就必須指定每一個維度的大小。

1️⃣ 宣告和初始化多維陣列

  • 範例:宣告一個 2x3 的多維陣列

    1
    var matrix [2][3]int

    📝 這樣我們創建了一個 2 行 3 列的陣列,每一個元素的初始值為 0。

  • 範例:初始化多維陣列

    1
    2
    3
    4
    matrix := [2][3]int{
    {1, 2, 3},
    {4, 5, 6},
    }

    📝 在這個範例中,我們創建了一個 2x3 的多維陣列並且進行初始化,包含數值 1, 2, 3, 4, 5, 6

2️⃣ 訪問多維陣列的元素

你可以使用兩個索引來訪問多維陣列的元素,第一個索引表示行,第二個索引表示列。

  • 範例:訪問多維陣列元素
    1
    2
    fmt.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
    16
    package 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
    16
    package 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
    13
    package 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
    5
    matrix := [][]int{
    {1, 2, 3},
    {4, 5},
    {6, 7, 8},
    }

    📝 在這個範例中,我們創建了一個多維切片,它的每一行的長度是動態的。

📢 在後面章節將會介紹到切片與多維切片。


🚀 陣列與多維陣列的限制與優化

  • 固定大小的多維陣列:多維陣列的大小是固定的,這意味著在創建時你需要確定每個維度的大小。如果資料結構的大小不確定,則可以考慮使用切片。
  • 性能考量:由於 Go 中的多維陣列是靜態分配的,所以它們在記憶體中是連續儲存的,這使得它們在處理大資料時具有優勢。然而,靈活性較差,適合需要固定大小的情境。

🎯總結

多維陣列是一個強大的資料結構,它可以幫助我們表示各種複雜的資料結構。理解如何宣告、初始化和操作多維陣列將有助於你解決更複雜的程式設計問題。

最後建議回顧一下 Go | 菜鳥教學 目錄,了解其章節內容。


註:以上參考了
Go
Go-Array types