Go練習問題2-11:ループ処理(range文)を理解しよう

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

Go言語の初心者向け問題2-11:ループ処理(range文)を理解しよう

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

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

Go言語の文法「ループ処理(range文)」とは





ここではループ処理(range文)の意味や使い方を復習します。必要ない方はここをクリックして練習問題へ飛びましょう。

Go言語のrange文を使用したループ処理の解説

range文はGoでよく使用される非常に強力な機能で、複数のデータを簡単に処理することができます。

基本的な使い方

range文は、スライスや配列などのデータを一つずつ処理するために使います。例えば、次のコードは、整数のスライスを反復処理し、それぞれの要素を出力する例です。

package main

import "fmt"

func main() {
    numbers := []int{10, 20, 30, 40, 50}

    // range文を使ってスライス内の各要素を反復処理
    for i, num := range numbers {
        fmt.Printf("インデックス: %d, 値: %d\n", i, num)
    }
}

このコードでは、rangeを使ってスライスnumbersの全ての要素を処理しています。ループ内では、インデックスと対応する値が取得でき、fmt.Printfで表示しています。

マップに対するrange文

Goでは、rangeを使ってマップのキーと値を取得できます。次の例を見てみましょう。

package main

import "fmt"

func main() {
    capitals := map[string]string{"Japan": "Tokyo", "France": "Paris", "India": "New Delhi"}

    // range文を使ってマップ内のキーと値を反復処理
    for country, capital := range capitals {
        fmt.Printf("%sの首都は%sです。\n", country, capital)
    }
}

この例では、rangeを使ってマップcapitalsの全てのキーと値を処理しています。

チャンネルに対するrange文

チャンネルのデータを順番に処理する場合にも、range文が使えます。チャンネルが閉じられるまで、range文で値を受信し続けます。

package main

import "fmt"

func main() {
    ch := make(chan int, 5)

    // チャンネルに値を送信
    go func() {
        for i := 0; i < 5; i++ {
            ch <- i
        }
        close(ch)
    }()

    // range文を使ってチャンネルからの受信を処理
    for num := range ch {
        fmt.Println(num)
    }
}

このコードでは、ゴルーチンがチャンネルに値を送り、range文でその値を受信して出力します。チャンネルが閉じられると、ループが終了します。

まとめ

range文は、Goでデータ構造を効率的に処理するための重要な文法です。スライス、マップ、チャンネルなど、さまざまなデータ型に適用できるため、プログラミングにおいて非常に有用です。

Go練習問題2-11:配列の合計を計算するプログラムを作成しよう

整数を格納した配列の合計を計算するプログラムを作成しましょう。

このプログラムでは、range文を使って配列内の全ての要素をループし、それらを合計します。

この問題の要件

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

  1. 配列の作成: 整数を5つ含む配列を作成し、以下の値を格納すること。
    • 配列の要素: 1, 2, 3, 4, 5
  2. 合計の初期化: 合計を格納する変数sumを宣言し、初期値として0を代入すること。
  3. range文を使ったループ処理: range文を使って配列内の各要素をループし、それらの値をsumに加算すること。
  4. 合計の表示: 配列の合計を表示すること。

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

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

配列の合計: 15

この問題を解くヒント

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

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

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

1.package main の宣言
2.import "fmt" の使用
3.main 関数の定義
 3-1. 整数の配列 numbers を作成し、初期値を設定
 3-2. 合計を格納する変数 sum の宣言と初期化
 3-3. range 文を使ったループ処理で配列内の全ての整数を合計
  3-3-1. 配列の各要素を取り出し、sum に加算
 3-4. 結果を表示する fmt.Printf 文の使用

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

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

package main

import "fmt"

func main() {
    // 整数の配列を作成
    numbers := []int{1, 2, 3, 4, 5}

    // 合計を格納する変数
    sum := 0

    // range文を使って配列内の全ての整数を合計
    /*【穴埋め問題1】ここに、range文を使って配列numbersの全ての要素を取り出し、sumに加算するコードを書いてください。*/
    
    // 結果を表示
    fmt.Printf("配列の合計: %d\n", sum)
}

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

解答例と解説

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

正解コードの例

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

package main

import "fmt"

func main() {
    // 整数の配列を作成
    numbers := []int{1, 2, 3, 4, 5}

    // 合計を格納する変数
    sum := 0

    // range文を使って配列内の全ての整数を合計
    for _, num := range numbers {
        sum += num // 各要素を合計に追加
    }

    // 結果を表示
    fmt.Printf("配列の合計: %d\n", sum)
}

正解コードの解説

このGoコードは、配列内の整数の合計を計算するための基本的なプログラムです。

このプログラムでは、Go言語のrange文を使って、配列の各要素に効率的にアクセスし、その合計を求めます。以下に、このコードの各部分を詳しく説明します。

パッケージとインポート

package main

import "fmt"
  • package main: この宣言は、プログラムのエントリーポイントを示します。Goでは、すべてのプログラムはmainパッケージに属する必要があります。
  • import "fmt": fmtパッケージは、フォーマット済みのI/O(入力/出力)を提供します。ここでは、出力を行うために使用します。

メイン関数の開始

func main() {
  • main関数: プログラムの実行が開始される場所です。Goプログラムは必ずmain関数を持つ必要があります。

配列の作成

numbers := []int{1, 2, 3, 4, 5}
  • 配列の作成: 整数型の配列numbersを定義し、初期値として1から5までの値を持たせます。配列は固定サイズのデータ構造で、ここでは[]intとして定義されています。

合計を格納する変数の宣言と初期化

sum := 0
  • 変数の宣言と初期化: 合計を格納するための変数sumを宣言し、初期値として0を設定します。

range文を使ったループ処理

for _, num := range numbers {
    sum += num
}
  • range: Goのrange文は、配列やスライスの要素をループ処理するために使用されます。ここでは、numbers配列内の各要素を順番に取り出し、その値をsumに加算しています。このようにして、すべての要素の合計を計算します。

結果の表示

fmt.Printf("配列の合計: %d\n", sum)
  • 結果の表示: fmt.Printfを使って、計算された合計を出力します。%dは整数値を表示するためのフォーマット指定子で、sumの値がここに挿入されます。

まとめ

このプログラムでは、Goのrange文を使って配列の要素を効率的に操作する方法を学びます。

range文は、配列やスライスのすべての要素に対して同じ処理を繰り返したい場合に非常に便利です。

このプログラムを通じて、ループ処理の基本的な使い方をしっかりと身につけましょう。

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

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

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

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






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