ネストされたループ
CoddyのGOジャーニー「基礎」セクションの一部 — レッスン 49/109。
入れ子になったループ(ネストされたループ)は、別のループの中に配置されたループのことです。内側のループは、外側のループの各反復ごとに完全に実行されます。
ネストされたループを使用して、1から3の数字の乗算表を作成しましょう:
for i := 1; i <= 3; i++ {
for j := 1; j <= 3; j++ {
fmt.Printf("%d×%d=%d\t", i, j, i*j)
}
fmt.Println()
}このコードを実行すると、外側のループ変数 (i) の各値に内側のループ変数 (j) のすべての値を掛け合わせた九九の表(乗算表)が得られます。出力は画面に次のように表示されます:
1×1=1 1×2=2 1×3=3
2×1=2 2×2=4 2×3=6
3×1=3 3×2=6 3×3=9 これがどのように動作するのか、順を追って理解していきましょう:
まず、外側のループが i=1 を設定し、内側のループが完全に実行されます:
i=1, j=1: prints "1×1=1"
i=1, j=2: prints "1×2=2"
i=1, j=3: prints "1×3=3"内側のループが終了した後、fmt.Println() を使用して改行を出力します。
その後、外側のループが i=2 を設定し、内側のループが再び実行されます:
i=2, j=1: prints "2×1=2"
i=2, j=2: prints "2×2=4"
i=2, j=3: prints "2×3=6"最後に、外側のループは i=3 を設定し、内側のループが最後にもう一度実行されます:
i=3, j=1: prints "3×1=3"
i=3, j=2: prints "3×2=6"
i=3, j=3: prints "3×3=9"ループの中にループを入れるこのパターンは、データの表を扱ったり、グリッドのような構造を作成したりする際に非常に役立ちます。
チャレンジ
初心者このチャレンジでは、入れ子になったループを使用して簡単なパターンを出力する練習をします。外側のループで行を、内側のループで列を反復処理し、文字の小さなグリッドを作成します。
入れ子になったループを完成させて、アスタリスク(*)の3x3グリッドを出力してください。各アスタリスクの後にはスペースを入れる必要があるため、各行は * * * (末尾にスペースあり)のようになります。期待される出力は以下の通りです:
* * * * * * * * *
チートシート
入れ子になったループ(ネストされたループ)は、別のループの中に配置されたループのことです。外側のループの各反復に対して、内側のループが完全に実行されます。
for i := 1; i <= 3; i++ {
for j := 1; j <= 3; j++ {
fmt.Printf("%d×%d=%d\t", i, j, i*j)
}
fmt.Println()
}外側のループが行を制御し、内側のループが列を制御します。外側のループの各反復において、内側のループはすべての反復を完了してから、次の外側のループの反復に移動します。
自分で試してみよう
package main
import "fmt"
func main() {
// グリッドの行数と列数
rows := 3
columns := 3
// TODO: アスタリスク (*) のグリッドを表示するための入れ子のループを作成する
// 外側のループで行を反復処理する
// 内側のループで列を反復処理する
for i := 0; i < rows; i++ {
// 各列にアスタリスクを表示するための内側のループをここに追加する
// 各行の後に改行を表示する
fmt.Println()
}
}このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。