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
文を使って配列内の全ての要素をループし、それらを合計します。
この問題の要件
以下の要件に従ってコードを完成させてください。
- 配列の作成: 整数を5つ含む配列を作成し、以下の値を格納すること。
- 配列の要素:
1, 2, 3, 4, 5
- 配列の要素:
- 合計の初期化: 合計を格納する変数
sum
を宣言し、初期値として0
を代入すること。 - range文を使ったループ処理:
range
文を使って配列内の各要素をループし、それらの値をsum
に加算すること。 - 合計の表示: 配列の合計を表示すること。
ただし、以下のような実行結果となるコードを書くこと。
*****↓↓正解コードの実行結果の例↓↓*****
配列の合計: 15
この問題を解くヒント
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
文の使用
以下のコードをコピーし、コメントに従ってコードを完成させて下さい。
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を活用しています。
問題ないことは確認していますが、もし間違いや表現の違和感などありましたら、ご指摘頂けると大変助かります。