マップ #
マップを初期化する #
package main
import (
"fmt"
)
func main() {
// マップの初期値は nil
var m0 map[int]bool
fmt.Printf("%#v, %t\n", m0, m0 == nil) // == map[int]bool(nil), true
// 初期化
m1 := map[int]bool{}
fmt.Printf("%#v\n", m1) // == map[int]bool{}
// make を使った初期化
m2 := make(map[string]string)
fmt.Printf("%#v\n", m2) // == map[string]string{}
// 初期化時に値を入れる
m3 := map[string]int{
"hello": 1,
"world": 10,
}
fmt.Printf("%#v\n", m3) // == map[string]int{"hello":1, "world":10}
}
マップの要素の登録・更新・削除をする #
package main
import (
"fmt"
)
func main() {
m := map[string]int{}
// 要素の登録
m["aaa"] = 10
m["bbb"] = 20
m["ccc"] = 30
fmt.Println(m) // == map[aaa:10 bbb:20 ccc:30]
// 要素の更新
m["bbb"] = 21
fmt.Println(m) // == map[aaa:10 bbb:21 ccc:30]
// 要素の削除
delete(m, "ccc")
fmt.Println(m) // == map[aaa:10 bbb:21]
}
マップの要素を取得する #
マップからの要素の取得時には失敗成功を bool で受け取ることができる。
package main
import (
"fmt"
)
func main() {
m := map[string]int{
"aaa": 10,
"bbb": 20,
}
// 要素の取得
v, ok := m["aaa"]
// 取得に成功すると ok が true になる
if ok {
fmt.Println(v) // == 10
}
// 取得に失敗する場合
if v, ok := m["ccc"]; ok {
fmt.Println(v)
} else {
fmt.Println("ccc is not found")
}
}
マップの要素をループで処理する #
range
を使うとキーと値のペアでループを回せる。
package main
import (
"fmt"
)
func main() {
m := map[string]int{
"aaa": 10,
"bbb": 20,
}
for k, v := range m {
fmt.Println(k, v)
}
}
マップのマップを定義する #
package main
import (
"fmt"
)
func main() {
m := map[string]map[int]int{
"aaa": map[int]int{
1: 2,
3: 4,
},
"bbb": map[int]int{
5: 6,
7: 8,
},
}
fmt.Println(m) // == map[aaa:map[1:2 3:4] bbb:map[5:6 7:8]]
}