マップ

Go言語における**マップ(map)**は、キーと値のペアを保持するハッシュテーブル型のデータ構造です。Pythonの辞書(dict)やJavaのHashMapに相当するものです。


1. 基本構文

マップの宣言と初期化は以下のように行います:

go
var m map[string]int // 宣言のみ(nilマップ) m = make(map[string]int) // 初期化 // 省略形 m := make(map[string]int)

キーの型と値の型を指定して使用します。上記では、キーがstring型、値がint型のマップを定義しています。


2. 要素の追加・更新

go
m["apple"] = 100 // 新規追加 m["apple"] = 150 // 値の更新

キーが存在しない場合は追加され、存在する場合は値が更新されます。


3. 要素の取得

go
value := m["apple"]

指定したキーに対応する値を取得できます。


4. 要素の存在確認

go
value, ok := m["banana"] if ok { fmt.Println("存在する:", value) } else { fmt.Println("存在しない") }

okはブール値で、キーが存在すればtrue、存在しなければfalseになります。


5. 要素の削除

go
delete(m, "apple")

指定したキーとその値を削除します。


6. マップの反復処理(for range)

go
for key, value := range m { fmt.Println(key, value) }

マップの全要素を走査できます。順序は保証されません。


7. マップの初期値とゼロ値

  • 宣言のみでmakeを使わないマップ(nilマップ)は操作できません。アクセスや代入を試みるとランタイムパニックになります。

  • make()で初期化したマップは空の状態から始まります。


8. マップの比較

マップ同士の比較はできません(==演算子は使用不可)が、nilかどうかのチェックは可能です。

go
var m1 map[string]int fmt.Println(m1 == nil) // true

9. マップの応用例

go
func countFrequencies(s string) map[rune]int { freq := make(map[rune]int) for _, r := range s { freq[r]++ } return freq }

文字列中の文字の出現回数をカウントするなど、マップは頻繁に使用されます。


まとめ

操作 説明
make(map[K]V) マップの作成
m[k] = v 要素の追加または更新
v := m[k] 要素の取得
v, ok := m[k] 要素の存在確認
delete(m, k) 要素の削除
for k, v := range m マップの反復処理

Goのマップはシンプルながら非常に強力であり、効率的なキー・バリュー管理が可能です。

生成日:2025/05/03