マップ(Map)
Golangではハッシュテーブル(hash table)のことを 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は衝突を起こしたキー同士をポインターでつなぎます。(連鎖法)
動画
元記事