golangで多次元連想配列を使う時にいろいろ調べたので、その備忘録。
多次元連想配列を使う
- 宣言方法
sample := make(map[型]map[型]型)
or
sample := map[型]map[型]型{}
- 値の代入
- 注意:連想配列の中の連想配列を初期化する必要がある
// 失敗パターン
sample := make(map[int]map[int])
sample[1][2] := 3 ->これダメ絶対
//成功パターン
sample := make(map[int]map[int]int)
for i := 0; i < 5; i++ {
if sample[i] == nil{
sample[i] := make(map[int]int)
}
sample[i][i] = i
}
多次元連想配列から1つめのkeyで取り出してみて
連想配列が存在しない場合初期化する処理を入れる必要がある。
初期化していない場合は直接代入できない。
個人的に少し気持ち悪いが、どうしても使いたい場合はこうするしかないっぽい。
他の方法
多次元連想配列を使いたい理由が「キーを2つ持たせたい」というだけの場合は
mapのキーを構造体にすることで多次元にせずに連想配列にすることでもっと簡単なコードになる
- 構造体をキーにした連想配列
type smpl struct {
key1 int
key2 int
}
// 連想配列作成
sample := make(map[smpl]int)
map[smpl{key1:1,key2:2}] = 3
構造体をキーにした連想配列の方が読みやすいと思う。