Caution

お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。

マップ

マップはキーと値のペアを管理するデータ構造です。他の言語の「辞書」や「ハッシュテーブル」に相当し、キーから値を素早く取得できます。

構文
// マップの宣言と初期化
var m map[キー型]値型              // nil マップ(読み取り専用)
m := make(map[キー型]値型)        // 書き込み可能なマップ
m := map[キー型]値型{             // リテラルで初期化
	キー1: 値1,
	キー2: 値2,
}

// 操作
m[キー] = 値                     // 追加・更新
値 := m[キー]                    // 取得(キーがなければゼロ値)
値, ok := m[キー]                // キーの存在確認
delete(m, キー)                  // 削除
長さ := len(m)                   // 要素数
構文一覧
操作概要
make(map[K]V)空のマップを作成します。nilマップへの書き込みはpanicになるため、必ずmakeかリテラルで初期化します。
m[key] = valキーに値を設定します。すでに存在するキーの場合は上書きします。
val := m[key]キーに対応する値を取得します。キーがない場合は値型のゼロ値が返ります。
val, ok := m[key]値とキーの存在確認を同時に行います。okはキーが存在すればtrue、なければfalseです。
delete(m, key)指定したキーとその値をマップから削除します。存在しないキーを指定してもエラーになりません。
len(m)マップの要素数を返します。
サンプルコード
package main

import "fmt"

func main() {
	// makeでマップを作成
	scores := make(map[string]int)
	scores["田中"] = 85
	scores["鈴木"] = 92
	scores["佐藤"] = 78

	fmt.Println(scores["田中"]) // 85

	// リテラルで初期化
	colors := map[string]string{
		"red":   "#FF0000",
		"green": "#00FF00",
		"blue":  "#0000FF",
	}

	// キーの存在確認
	if val, ok := colors["red"]; ok {
		fmt.Println("red:", val)
	}

	// 存在しないキー(ゼロ値が返る)
	fmt.Println(scores["山田"]) // 0

	// 削除
	delete(scores, "佐藤")
	fmt.Println(len(scores)) // 2

	// rangeでループ(順序は不定)
	for name, score := range scores {
		fmt.Printf("%s: %d\n", name, score)
	}
}
概要

マップは参照型です。関数に渡したり別の変数に代入したりすると、同じマップを指します。『var m map[string]int』だけでは nilマップになり、値を書き込もうとするとpanicが発生します。必ず『make()』またはリテラルで初期化してから使いましょう。

マップのキーに使える型は、比較演算子(『==』)が使える型に限られます。スライスや他のマップ、関数型はキーにできません。

マップのループ順序はGoの仕様上、実行するたびに異なります。順序が必要な場合はキーをスライスに取り出してからソートしてください。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。