Go練習問題2-10:マップを理解しよう

記事内に商品プロモーションを含む場合があります

Go言語の初心者向け問題2-10:マップを理解しよう

この問題を解くために必要な知識:
レベル1の知識論理演算子と代入演算子条件分岐(if-else文)条件分岐(switch文)ループ処理(for文)ラベルとgoto文無限ループ配列スライスとキャパシティ整列と検索マップループ処理(range文)サードパーティパッケージ

<<前の問題 問題集Top 次の問題>>

Go言語の文法「マップ」とは





ここではマップの意味や使い方を復習します。必要ない方はここをクリックして練習問題へ飛びましょう。

Go言語のマップ(Map)について学ぼう

Go言語のマップ(Map)は、キーと値のペアを保持するデータ構造です。他の言語でいうところの「辞書」や「連想配列」に相当します。マップを使用すると、データをキーに基づいて効率的に検索、追加、削除することができます。

マップの定義

Go言語では、マップを次のように定義します。

m := map[string]int{"one": 1, "two": 2}

上記の例では、map[string]intという型のマップを定義しています。ここで、stringはキーの型、intは値の型を示しています。

このマップには、”one”というキーが1という値に、”two”というキーが2という値に対応しています。

マップの操作

マップに対する操作は非常に簡単です。新しいキーと値を追加したり、既存のキーの値を更新したり、キーを指定して値を取得することができます。

例えば、次のようにマップに新しいキーと値を追加できます。

m["three"] = 3

キー"three"が追加され、その値として3が設定されます。

マップから値を取得する

マップから値を取得するには、次のようにキーを指定します。

value := m["two"]
fmt.Println(value)  // 出力: 2

このコードでは、キー"two"に対応する値を取得し、変数valueに格納しています。

マップの便利な機能

Goのマップには、値が存在するかどうかを確認するための機能もあります。次のコードでは、キーが存在するかを確認します。

value, exists := m["four"]
if exists {
    fmt.Println("Value:", value)
} else {
    fmt.Println("Key not found.")
}

この例では、キー"four"が存在するかを確認し、存在すればその値を表示します。存在しない場合は、"Key not found."と表示されます。

まとめ

Go言語のマップは、データを効率的に管理するための強力なツールです。キーと値をペアで管理できるため、データの検索や操作が簡単になります。

これを理解しておくと、Go言語でのプログラミングがさらに楽しくなります。 ​

Go練習問題2-10:マップを使ってシンプルな在庫管理プログラムを作成しよう

果物の在庫を管理するプログラムを作成しましょう。

このプログラムでは、果物の種類ごとに現在の在庫数をマップで管理し、在庫の表示や更新を行います。

マップを使用して、果物の在庫数を追加したり、表示したりできるようにしましょう。

この問題の要件

以下の要件に従ってコードを完成させてください。

  1. マップの作成: キーとして果物の名前、値として在庫数を持つマップを作成すること。初期値は以下の通りです。
    • りんご: 10個
    • ばなな: 5個
    • みかん: 7個
  2. 在庫の初期表示: 作成したマップを使い、初期の在庫数を画面に表示すること。
  3. 在庫の更新: マップ内のりんごの在庫を3個、ばななの在庫を2個増やすこと。
  4. 在庫の更新後表示: 更新後の在庫数を再度表示すること。
  5. 特定の果物の在庫表示: みかんの在庫数を個別に表示すること。

ただし、以下のような実行結果となるコードを書くこと。

*****↓↓正解コードの実行結果の例↓↓*****

現在の在庫:
りんご: 10個
ばなな: 5個
みかん: 7個

在庫を更新しました。
りんご: 13個
ばなな: 7個
みかん: 7個

みかんの在庫は7個です。

この問題を解くヒント

1からコードを組み立てることが難しい場合は、以下のヒントを開いて参考にしましょう。

ヒント1【コードの構成を見る】

正解のコードは上から順に以下のような構成となっています。

1.package main の宣言
2.import文の使用
3.main関数の定義
 3-1. マップ fruits を作成し、初期の在庫値を設定
  3-1-1. "りんご": 10 をマップに追加
  3-1-2. "ばなな": 5 をマップに追加
  3-1-3. "みかん": 7 をマップに追加
 3-2. マップの初期値を表示
  3-2-1. "りんご" の在庫を表示
  3-2-2. "ばなな" の在庫を表示
  3-2-3. "みかん" の在庫を表示
 3-3. マップの在庫値を更新
  3-3-1. "りんご" の在庫を3個追加
  3-3-2. "ばなな" の在庫を2個追加
 3-4. 更新された在庫値を表示
  3-4-1. "りんご" の在庫を表示
  3-4-2. "ばなな" の在庫を表示
  3-4-3. "みかん" の在庫を表示
 3-5. 特定の果物の在庫値を個別に表示
  3-5-1. "みかん" の在庫を表示

ヒント2【穴埋め問題にする】

以下のコードをコピーし、コメントに従ってコードを完成させて下さい。

package main

import "fmt"

func main() {
    // フルーツの在庫を管理するマップを作成
    /* 【穴埋め問題1】
    ここに、りんご、ばなな、みかんの初期在庫を設定するマップを作成するコードを書いてください。
    */

    // 在庫を表示
    fmt.Println("現在の在庫:")
    fmt.Printf("りんご: %d個\n", fruits["りんご"])
    fmt.Printf("ばなな: %d個\n", fruits["ばなな"])
    fmt.Printf("みかん: %d個\n", fruits["みかん"])

    // 在庫を追加
    /* 【穴埋め問題2】
    ここに、りんごの在庫を3個、ばななの在庫を2個追加するコードを書いてください。
    */

    // 追加後の在庫を表示
    fmt.Println("\n在庫を更新しました。")
    fmt.Printf("りんご: %d個\n", fruits["りんご"])
    fmt.Printf("ばなな: %d個\n", fruits["ばなな"])
    fmt.Printf("みかん: %d個\n", fruits["みかん"])

    // 特定の果物の在庫を確認
    /* 【穴埋め問題3】
    ここに、みかんの在庫を表示するコードを書いてください。
    */
}

このヒントを見てもまだ回答を導き出すのが難しいと感じる場合は、先に正解のコードと解説を見て内容を理解するようにしましょう。

解答例

この問題の一つの正解例とそのコードの解説を以下に示します。

正解コードの例

例えば以下のようなプログラムが考えられます。

package main

import "fmt"

func main() {
    // フルーツの在庫を管理するマップを作成
    fruits := map[string]int{
        "りんご": 10,
        "ばなな": 5,
        "みかん": 7,
    }

    // 在庫を表示
    fmt.Println("現在の在庫:")
    fmt.Printf("りんご: %d個\n", fruits["りんご"])
    fmt.Printf("ばなな: %d個\n", fruits["ばなな"])
    fmt.Printf("みかん: %d個\n", fruits["みかん"])

    // 在庫を追加
    fruits["りんご"] += 3
    fruits["ばなな"] += 2

    // 追加後の在庫を表示
    fmt.Println("\n在庫を更新しました。")
    fmt.Printf("りんご: %d個\n", fruits["りんご"])
    fmt.Printf("ばなな: %d個\n", fruits["ばなな"])
    fmt.Printf("みかん: %d個\n", fruits["みかん"])

    // 特定の果物の在庫を確認
    fruit := "みかん"
    fmt.Printf("\n%sの在庫は%d個です。\n", fruit, fruits[fruit])
}

正解コードの解説

このGoコードは、果物の在庫管理を行う簡単なプログラムです。ここでは、Go言語で「マップ」というデータ構造を使って、複数の果物とその在庫数を管理する方法を学びます。以下に、このコードの各部分を説明します。

パッケージとインポート

package main
import "fmt"
  • package main: Goプログラムのエントリーポイントを定義するための宣言です。mainという名前のパッケージが必須です。
  • import "fmt": fmtパッケージは、文字列を出力するための標準ライブラリです。このプログラムでは、fmt.Printlnfmt.Printfを使ってコンソールにメッセージを表示します。

マップの作成と初期化

fruits := map[string]int{
    "りんご": 10,
    "ばなな": 5,
    "みかん": 7,
}
  • マップ (map): Goのマップは、キーと値のペアを保持するデータ構造です。ここでは、キーとして果物の名前(文字列型)、値としてその在庫数(整数型)を持つマップを作成しています。
  • 初期化: fruitsというマップには、りんご、ばなな、みかんの初期在庫がそれぞれ10個、5個、7個として設定されています。

初期在庫の表示

fmt.Println("現在の在庫:")
fmt.Printf("りんご: %d個\n", fruits["りんご"])
fmt.Printf("ばなな: %d個\n", fruits["ばなな"])
fmt.Printf("みかん: %d個\n", fruits["みかん"])
  • 在庫の表示: fmt.Printfを使って、マップから各果物の在庫を取り出し、コンソールに表示しています。

在庫の更新

fruits["りんご"] += 3
fruits["ばなな"] += 2
  • 在庫の追加: マップを使用して、りんごの在庫を3個、ばななの在庫を2個増やします。マップ内の値に直接アクセスし、更新しています。

更新後の在庫表示

fmt.Println("\n在庫を更新しました。")
fmt.Printf("りんご: %d個\n", fruits["りんご"])
fmt.Printf("ばなな: %d個\n", fruits["ばなな"])
fmt.Printf("みかん: %d個\n", fruits["みかん"])
  • 更新後の表示: 在庫を更新した後、再度マップから各果物の在庫を取り出して表示します。

特定の果物の在庫確認

fruit := "みかん"
fmt.Printf("\n%sの在庫は%d個です。\n", fruit, fruits[fruit])
  • 特定の在庫確認: 変数fruitを使って、マップから「みかん」の在庫を取り出し、表示しています。

まとめ

このコードでは、Goのマップを使って複数のデータ(果物の在庫数)を簡単に管理し、操作する方法を学びます。

マップはキーと値をペアで保持できる強力なデータ構造で、さまざまな用途に使われます。

このプログラムを通じて、マップの基本操作に慣れ、他の複雑なデータ処理にも応用できるようになることを目指しましょう。

<<前の問題 問題集Top 次の問題>>

この問題への質問・コメント

この問題を作成するにあたりAIを活用しています。

問題ないことは確認していますが、もし間違いや表現の違和感などありましたら、ご指摘頂けると大変助かります。






    Go練習問題集へ戻る
    トップページへ戻る