マップの操作
0shim4
マップとは
スライスと同じく頻繁に利用されるコンポジット型の1つ。キーはユニークで値と紐づけられ、キーの順序は意図的にランダムにされる。追加や削除の順も関係ないため繰り返し処理の順序は保証されない。
また、スライスと比べて要素が多くなるとマップの方が検索が早くなるが、メモリの消費も増えるのでバランスを見て扱うべきらしい。参照
値の初期化
mapEmpty := map[string]int{}
fmt.Println(mapEmpty)
// OutPut: map[]
mapMake := make(map[string]int)
fmt.Println(mapMake)
// OutPut: map[]
// あらかじめ容量を確保
mapCap := make(map[string]int, 10)
fmt.Println(mapCap)
// OutPut: map[]
値およびキーの存在有無の取得
m := map[string]int{
"taro": 30,
"jiro": 20,
}
age := m["taro"]
fmt.Println(age)
// OutPut: 30
age, ok := m["jiro"]
fmt.Println(age, ok)
// OutPut: 20 true
age, ok = m["saburo"]
fmt.Println(age, ok)
// OutPut: 0 false
値の追加・削除
m := map[string]int{
"taro": 30,
"jiro": 20,
}
m["saburo"] = 10
fmt.Println(m["saburo"])
// OutPut: 10
delete(m, "jiro")
fmt.Println(m)
// OutPut: map[saburo:10 taro:30]
マップを利用して重複を削除
brothers := []string{"taro", "jiro", "taro", "saburo", "saburo", "shiro"}
unique := make([]string, 0, len(brothers))
m := make(map[string]struct{})
for _, v := range brothers {
if _, ok := m[v]; ok {
continue
}
unique = append(unique, v)
m[v] = struct{}{}
}
fmt.Println(unique)
// OutPut: [taro jiro saburo shiro]
参考文献
エキスパートたちのGo言語 一流のコードから応用力を学ぶ Software Design plus