Go 快速入門指南 - 陣列

洋芋土豆發表於2022-12-29

概述

陣列 是具有相同資料型別的一組長度固定的資料項序列,分配在連續的記憶體地址上。其中資料型別可以是整型、布林型等基礎資料型別,也可以是自定義資料型別。
陣列長度 必須是一個常量表示式,並且必須是一個非負數。同時,陣列長度 也是陣列型別的一部分, 例如 [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
*/

遍歷陣列

可以使用兩種方法遍歷陣列,普通迴圈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 := 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
*/

擴充套件閱讀

  1. https://zh.wikipedia.org/wiki...
  2. https://github.com/unknwon/th...

聯絡我

公眾號

相關文章