コース一覧
    Go基礎:データ構造
    マップ

    Go基礎:データ構造

    Goのスライス、マップ、構造体、メソッドを使ったデータ表現を学ぶコースです。

    1
    スライスとマップ
    01. 配列15分
    02. スライス15分
    03. appendで育てる15分
    04. rangeで走査する15分
    05. マップ15分
    06. カンマokイディオム15分
    07. つくる: 検索と集計20分
    08. 第5章クイズ10分
    2
    構造体とメソッド
    01. 構造体15分
    02. 初期化とフィールド15分
    03. メソッド15分
    04. ポインタレシーバ20分
    05. New関数の慣習15分
    06. 構造体のスライス15分
    07. つくる: Itemで再設計20分
    08. 第6章クイズ10分

    マップ

    キーで引く入れ物

    スライスは番号で引きます。マップはキーで引きます。

    Go

    counts := map[string]int{
    	"本":     3,
    	"家電":   1,
    }
    
    counts["本"]   // 3

    map[キーの型]値の型 と書きます。上の例は「文字列で引くと整数が返る」入れ物です。

    作り方

    Go

    counts := map[string]int{}        // 空で作る
    counts := make(map[string]int)    // 同じ意味
    var counts map[string]int         // これは危険

    3つ目に注意してください。マップのゼロ値は nil で、書き込むと実行時に止まります。

    Go

    var counts map[string]int
    counts["本"] = 1   // panic: assignment to entry in nil map

    スライスは nil でも append できましたが、マップは違います。使う前に必ず作ってください。

    読むだけなら nil でも大丈夫、という中途半端さも混乱のもとです。counts := map[string]int{} と書く癖を付けるのが安全です。

    読み書き

    Go

    counts["本"] = 3       // 書く
    counts["本"]++         // 増やす
    len(counts)            // 件数
    delete(counts, "本")   // 消す

    counts["本"]++ が便利です。まだ無いキーでも動きます。

    Go

    counts := map[string]int{}
    counts["本"]++   // 1 になる

    無いキーを読むとゼロ値の 0 が返るので、0 に 1 を足して 1 になります。集計のコードが、キーの有無を確かめずに書けます。

    集計の型

    Go

    counts := map[string]int{}
    for _, category := range categories {
    	counts[category]++
    }

    この3行が、カテゴリ別の件数を数える定番の形です。第3章では if を並べて数えていたものが、キーの種類が増えても同じ長さで書けます。

    順番は保証されない

    Go

    for k, v := range counts {
    	fmt.Println(k, v)
    }

    この出力の順番は毎回変わります。Go が意図してばらばらにしています。順番に頼ったコードを書かせないためです。

    決まった順で並べたいなら、キーを取り出して並べ替えます。この演習では、順番に頼らない形で答えを組み立ててもらいます。

    要件

    1. マップを使ってカテゴリごとの件数を数える
    2. マップは map[string]int{} で作る
    3. カテゴリ名はN件です の形を返す
    4. 1件も無いカテゴリは 0 件として答える

    ヒント

    `for _, c := range categories {` で回します。添字は要らないので `_` にします

    `counts[c]++` と書くだけで数えられます。キーがまだ無くてもゼロ値の 0 から始まるので、事前の確認は要りません

    無いキーを読むと 0 が返るので、該当なしの場合も特別扱いは要りません

    生田 陸人
    監修生田 陸人
    ゆめさくエンジニア / 現役ソフトウェアエンジニア監修者プロフィールを見る →
    編集 ゆめさく編集部·公開 2026/08/10

    関連レッスン

    • カンマokイディオム

      キーの有無を2つ目の戻り値で判定し、無いキーを安全に扱えるようになります。

    • つくる: 検索と集計

      第5章の知識でキーワード検索とカテゴリ集計を同時に行えるようになります。

    • 第5章クイズ

      配列とスライスの違い、append、range、マップ、カンマokについての理解を確認します。

    • 構造体

      関連するデータを1つの型にまとめ、Item構造体を定義できるようになります。

    main.go
    エディタを読み込んでいます

    メモ

    マップ

    ⌘S で保存