ネストしたループ
CoddyのGDScriptジャーニー「基礎」セクションの一部。レッスン 49/92。
ネストされたループとは、別のループの中にあるループです。外側のループが1回繰り返されるごとに、内側のループはすべての反復を実行します。
var rows := 3
var cols := 2
for i in range(rows):
print("Outer: ", i)
for j in range(cols):
print(" Inner: ", j)Outer: 0
Inner: 0
Inner: 1
Outer: 1
Inner: 0
Inner: 1
Outer: 2
Inner: 0
Inner: 1内側のブロックは2段階インデントされています。全体で rows x cols = 3 x 2 = 6 回実行されます。外側のループが実行されるたびに j は 0 から再び始まり、rows と cols は変わらず、ループをいつ停止するかを示すだけです。
2つのループには異なる変数名が必要です。別のfor iの中にfor iと書くとエラーになり、プログラムの実行前に報告されます。
入れ子になったループは、行や列を扱うのに便利です。print()は常に行末で改行するため、星印を1行に出力するには、まず文字列に組み立て、内側のループが終わったら一度だけ出力します。
for row in range(2):
var line := ""
for col in range(3):
line += "*"
print(line)***
***外側のループは行ごとに1回実行され、内側のループは列ごとに星を1つ追加します。内側のループ内のbreakは内側のループだけを停止します。外側のループは次の反復に進みます。
チャレンジ
簡単このプログラムは2つの整数、rowsとcolsを読み取ります。
ネストしたループを使って、rows行、それぞれの行にcols個の星(*)が並ぶ長方形を出力します。
入力が3と4の場合、出力は次のとおりです。
****
****
****各ループに新しいカウンターを使い(たとえば、行にはrow、1行の星の数にはcol)、それをrowsまたはcolsと比較します。rowsとcols自体は変更しないでください。各行で再びcols個の星が必要です。
自分で試してみよう
extends Node
func _ready():
var rows := int(OS.read_string_from_stdin())
var cols := int(OS.read_string_from_stdin())
# 外側のループ: 行ごとに1回繰り返す
# 内側のループ: 列ごとに星を1つ追加する
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
基礎のすべてのレッスン
自分で練習してみよう: GDScriptオンラインコンパイラ