Go範例說明: 字典

字典 是 Go 內建的 關聯資料型態(有時在其他語言稱為 hashdict)。

package main
import (
    "fmt"
    "maps"
)
func main() {

如要建立空字典,請使用內建 makemake(map[key-type]val-type)

    m := make(map[string]int)

使用典型的 name[key] = val 語法設定 key/value 組合。

    m["k1"] = 7
    m["k2"] = 13

舉例來說,使用 fmt.Println 列印字典會顯示所有 key/value 組合。

    fmt.Println("map:", m)

使用 name[key] 針對一個 key 取得其 value。

    v1 := m["k1"]
    fmt.Println("v1:", v1)

如果 key 不存在,會傳回 value 型態的 零值

    v3 := m["k3"]
    fmt.Println("v3:", v3)

內建的 len 會針對字典傳回 key/value 組合的數量。

    fmt.Println("len:", len(m))

內建的 delete 會從字典移除 key/value 組合。

    delete(m, "k2")
    fmt.Println("map:", m)

如要從字典移除所有 key/value 組合,請使用內建的 clear

    clear(m)
    fmt.Println("map:", m)

從字典取得 value 時,第二個傳回值(為選用項目)會指出 key 是否存在於字典中。這可用於區分遺失的 key 和具有零值的 key,例如 0""。在這裡,我們不需要 value 本身,因此我們使用空白識別碼 _ 將其略過。

    _, prs := m["k2"]
    fmt.Println("prs:", prs)

您也可以在同一行程中透過此語法宣告並初始化新的字典。

    n := map[string]int{"foo": 1, "bar": 2}
    fmt.Println("map:", n)

maps 套件包含許多實用的字典工具函式。

    n2 := map[string]int{"foo": 1, "bar": 2}
    if maps.Equal(n, n2) {
        fmt.Println("n == n2")
    }
}

請注意,字典會以 map[k:v k:v] 的形式顯示在 fmt.Println 中。

$ go run maps.go 
map: map[k1:7 k2:13]
v1: 7
v3: 0
len: 2
map: map[k1:7]
map: map[]
prs: false
map: map[bar:2 foo:1]
n == n2

下一篇範例說明: 範圍