特定のループの Continue
CoddyのGOジャーニー「論理とフロー」セクションの一部。レッスン 3/68。
break とラベルを使用して特定のループを抜けられるのと同様に、Go では continue 文とラベルを使用することもできます。ラベル付きの continue は、指定したループの現在の反復をスキップし、次の反復へ移動します。
これは、nested loops で、単に内側の loop を続行するのではなく、内側の loop から outer loop の現在の iteration の残りを skip したい場合に特に役立ちます。
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 文によって outer loop の現在の iteration の残りの部分(inner loop と「End of outer loop iteration」メッセージを含む)がスキップされます。その後、プログラムは outer loop の次の iteration に直接進み、i は 2 になります。
チャレンジ
簡単このチャレンジでは、ラベル付きcontinue文を使用して、nested loopの実行を制御する練習をします。内側のloopで見つかった条件に基づいて、特定の外側のloopの反復をスキップする必要があるdata Processingシステムを構築します。
次の2つのinputsを受け取ります。
- 処理するrowの数を表すstring(例:
"4") - skip condition numberを表すstring(例:
"3")
次の2D data arrayがProvidedされています。
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}
}あなたのタスクは次のとおりです。
- 最初のinputからnumber of rowsをParseし、processするrowの数を決定する
- 2番目のinputからskip condition numberをParseする
- ラベル付き
continueを使用したnested loopsでdataをprocessする - each rowについて、そのrowの各列の値をCheckする
- rowのいずれかの列でskip condition numberがfoundした場合、ラベル付き
continueを使用してそのrowの残りのProcessingをskipし、次のrowに移動する - skip condition numberを含まないrowについては、
"Processing row [row_number]: [value1] [value2] [value3] [value4] [value5]"をPrintする - skip condition numberを含むrowについては、
"Skipping row [row_number] due to condition"をPrintする
row numberは0-based indexing(最初のrowは0)を使用して報告してください。最初のinputで指定されたnumber of rowsのみをprocessし、各rowの最初の5列のみをCheckしてください。
自分で試してみよう
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)
// 提供された2Dデータ配列
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を使ったネストしたループでデータを処理する
// 各行でスキップ条件の数値をチェックする
// 条件が見つかったかどうかに基づいて適切なメッセージを出力する
}このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
論理とフローのすべてのレッスン
自分で練習してみよう: Goオンラインコンパイラ