マップ(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は衝突を起こしたキー同士をポインターでつなぎます。(連鎖法)