🐙

Go言語のmapは定義されていないキーに対して加算が出来る

2022/10/19に公開

Go言語でマップにキーが定義されているかどうかを判定するには以下のような方法があります。
返り値はキー対応する値とキーが定義されているかどうかのbool値になります。

if val, ok := m[key]; ok {
    fmt.Printf(val)
}

mapに指定したキーが定義されている場合には加算し、定義されていない場合には初期値を代入したいというケースがあります。
上記のキーの存在確認の方法を踏まえて素直に書くと下記のようになります。

if _, ok := m[key]; ok {
    m[key] += 1
} else {
    m[key] = 1
}

しかし、これは下記のように省略して記述することが出来ます。
キーが存在していない場合でも正常に動作します。

m[key] += 1

同様に値が配列のときにappendしたい場合でも同様のことが出来ます。

if _, ok := m[key]; ok {
    m[key] = append(m[key], "foo")
} else {
    m[key] = []string{"foo"}
}

これは下記のように省略可能です。

m[key] = append(m[key], "foo")
GitHubで編集を提案

Discussion