Wen

[Go言語] 初心者必見シリーズ: マップ(Map)

N views

マップ(Map)

Golang ではハッシュテーブル(hash table)のことを map と呼びます。

キーと値の組を複数個格納し、キーに対応する値をすばやく参照するためのデータ構造です。

Mapのイメージ

定義方法

方法 1

  • 構文

    変数名 := map[型]型{初期値1, ..., 初期値n}
    
  • languages := map[string]string{
        "go":"golang",
        "rb":"ruby",
        "js":"javascript",
    }
    

方法 2

  • 構文

    変数名 := make(map[型]型, 容量)
    
  • languages := make(map[string]string)
    languages["go"] = "golang"
    languages["rb"] = "ruby"
    languages["js"] = "javascript"
    

要素の挿入と更新

  • 要素の挿入や更新:

    languages := map[string]string{}
    languages["go"] = "golang" // "go"キーが存在する場合は、valueが "golang" に更新され、
                                 //  存在しない場合は、("go", "golang") という Key-ValueのペアがMapに挿入される。
    
  • 要素の取得:

     elem, ok := languages["go"] // "go"キーが存在する場合は、 ok == true
                                 //          存在しない場合は、ok == false
    

    要素取得のイメージ

要素の走査 (iteration)

  • range で Map を走査できる。

    for key, value := range languages{
      ...
    }
    

    注意: Go の Map の iteration は、

    要素がランダムに取得されるため、実行するたびに異なる結果になります。

要素の衝突

複数の異なるキーが同じバケットに入ることを衝突(collision)と呼びます。

Go の Map は衝突を起こしたキー同士をポインターでつなぎます。(連鎖法

要素衝突時

動画 (YouTube)

本記事は 「表示 - 非営利 - 改変禁止 4.0 国際 (CC BY-NC-ND 4.0)」 を採用。