🐆

Go言語でmapを使ってみる

2023/06/28に公開

mapを使ってみる

公式の解説を翻訳しております

マップはGoの組み込み連想データ型です(他の言語ではハッシュやディクトと呼ばれることもあります)。

典型的な name[key] = val 構文を使ってキーと値のペアを設定する。

fmt.Printlnなどでマップを印刷すると、すべてのキーと値のペアが表示される。

name[key]でキーの値を取得する。

キーが存在しない場合は、値型のゼロ値が返される。

組み込み関数 len は、マップ上で呼び出されると、キーと値のペアの数を返す。

組み込み関数 delete は、マップからキー/値のペアを削除します。

マップから値を取得するときのオプションの2番目の返り値は、そのキーがマップに存在したかどうかを示します。これは、存在しないキーや、0や""のようなゼロ値を持つキーを区別するために使用することができます。ここでは、値そのものは必要ないので、空白の識別子 _ で無視しています。

この構文を使えば、同じ行で新しいマップを宣言して初期化することもできる。

マップは、fmt.Printlnでプリントされるとき、map[k:v k:v]の形で表示されることに注意してください。

package main

import "fmt"

func main() {
    // makeは、初期化された(ゼロ値ではない)マップを返します。
    m := make(map[string]int)
    // m[""]は、マップmにキー""が存在するかどうかを返します。
    m["k1"] = 7
    m["k2"] = 13

    fmt.Println("map:", m)
    // v1は、マップmのキー"k1"に対応する値を返します。
    v1 := m["k1"]
    fmt.Println("v1:", v1)
    // v3は、マップmのキー"k3"に対応する値を返します。
    v3 := m["k3"]
    fmt.Println("v3:", v3)
    // lenは、マップmの要素数を返します。
    fmt.Println("len:", len(m))
    // deleteは、マップmからキー"k2"とその値を削除します。
    delete(m, "k2")
    fmt.Println("map:", m)
    // _, prs := m["k2"]は、マップmにキー"k2"が存在するかどうかを返します。
    _, prs := m["k2"]
    fmt.Println("prs:", prs)
    // nは、マップリテラルです。
    n := map[string]int{"foo": 1, "bar": 2}
    fmt.Println("map:", n)
}

実行結果

map: map[k1:7 k2:13]
v1: 7
v3: 0
len: 2
map: map[k1:7]
prs: false
map: map[bar:2 foo:1]

まとめ

DartやJavaScriptでもMapは、ありましたが、Goは書き方が独特で、慣れるまで時間がかかりそうです。

Jboy王国メディア

Discussion