マップ

マップ #

マップを初期化する #

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}
}
play_circleRun open_in_newRun In The Playground

マップの要素の登録・更新・削除をする #

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]
}
play_circleRun open_in_newRun In The Playground

マップの要素を取得する #

マップからの要素の取得時には失敗成功を 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")
	}
}
play_circleRun open_in_newRun In The Playground

マップの要素をループで処理する #

range を使うとキーと値のペアでループを回せる。

package main

import (
	"fmt"
)

func main() {
	m := map[string]int{
		"aaa": 10,
		"bbb": 20,
	}

	for k, v := range m {
		fmt.Println(k, v)
	}
}
play_circleRun open_in_newRun In The Playground

マップのマップを定義する #

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]]
}
play_circleRun open_in_newRun In The Playground