特定のループの Continue
CoddyのGOジャーニー「論理とフロー」セクションの一部 — レッスン 3/68。
break を使用して特定のループを終了させるためにラベルを使用できるのと同様に、Go では continue ステートメントでもラベルを使用することができます。ラベル付きの continue は、指定されたループの現在の反復をスキップし、その次の反復へとジャンプします。
これは、単に内側のループを継続するのではなく、内側のループ内から外側のループの現在の反復の残りをスキップしたい場合に、入れ子になったループにおいて特に便利です。
outer:
for i := 0; i < 3; i++ {
for j := 0; j < 3; j++ {
if i == 1 && j == 0 {
continue outer
}
fmt.Printf("i=%d, j=%d\n", i, j)
}
fmt.Println("End of outer loop iteration")
}この例では、i == 1 && j == 0 のとき、continue outer ステートメントは、内側のループや "End of outer loop iteration" メッセージを含む、外側のループの現在の反復の残りの部分をスキップします。その後、プログラムは外側のループの次の反復に直接移動し、そこで i は 2 になります。
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
チャレンジ
簡単このチャレンジでは、ラベル付きの continue ステートメントを使用して、ネストされたループの実行を制御する練習をします。内部ループで見つかった条件に基づいて、外部ループの特定の反復をスキップする必要があるデータ処理システムを構築します。
2つの入力を受け取ります:
- 処理する行数を表す文字列(例:
"4") - スキップ条件となる数値を表す文字列(例:
"3")
以下の2次元データ配列が提供されています:
data := [][]int{
{1, 2, 3, 4, 5},
{6, 7, 8, 9, 10},
{11, 12, 13, 14, 15},
{16, 17, 18, 19, 20},
{21, 22, 23, 24, 25}
}あなたのタスクは以下の通りです:
- 最初の入力から行数を解析し、処理する行数を決定します
- 2番目の入力からスキップ条件となる数値を解析します
- ラベル付き
continueを使用したネストされたループでデータを処理します - 各行について、その行の各列の値をチェックします
- 行のいずれかの列にスキップ条件の数値が見つかった場合は、ラベル付き
continueを使用してその行の残りの処理をスキップし、次の行に移動します - スキップ条件の数値を含まない行については、
"Processing row [row_number]: [value1] [value2] [value3] [value4] [value5]"と出力します - スキップ条件の数値を含む行については、
"Skipping row [row_number] due to condition"と出力します
行番号は0ベースのインデックス(最初の行は0)を使用して報告してください。最初の入力で指定された行数のみを処理し、各行の最初の5列のみをチェックしてください。
チートシート
ネストされたループにおいて、continue とラベルを使用して、特定のループの現在の反復をスキップします:
outer:
for i := 0; i < 3; i++ {
for j := 0; j < 3; j++ {
if i == 1 && j == 0 {
continue outer
}
fmt.Printf("i=%d, j=%d\n", i, j)
}
fmt.Println("End of outer loop iteration")
}continue outer が実行されると、外側のループの現在の反復の残りの処理をスキップし、ラベル付けされたループの次の反復へ直接ジャンプします。
自分で試してみよう
package main
import (
"fmt"
"strconv"
)
func main() {
// 入力を読み込む
var rowsInput string
var skipConditionInput string
fmt.Scanln(&rowsInput)
fmt.Scanln(&skipConditionInput)
// 入力をパースする
numRows, _ := strconv.Atoi(rowsInput)
skipCondition, _ := strconv.Atoi(skipConditionInput)
// 提供された2次元データ配列
data := [][]int{
{1, 2, 3, 4, 5},
{6, 7, 8, 9, 10},
{11, 12, 13, 14, 15},
{16, 17, 18, 19, 20},
{21, 22, 23, 24, 25},
}
// TODO: 以下にコードを記述してください
// ラベル付きcontinueを使用した入れ子のループでデータを処理します
// 各行にスキップ条件の数値が含まれているか確認します
// 条件が見つかったかどうかに基づいて、適切なメッセージを出力します
}このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。