ネストしたループ
CoddyのRubyジャーニー「基礎」セクションの一部。レッスン 46/88。
ループの中に別のループを配置すると、ネストしたループを作成できます。内側のループは、外側のループの反復ごとに最後まで実行されるため、このパターンはグリッド、テーブル、組み合わせを扱うときに役立ちます。
rows = 2
cols = 3
for i in 1..rows
for j in 1..cols
puts "i=#{i}, j=#{j}"
end
endこれは6行を出力します。iの各値について、内側のループはjのすべての値を順に処理します。
まず、i は 1 のまま、j は 1、2、3 と進みます。次に i が 2 になり、j は再び 1、2、3 と進みます。rows と cols は変化しません。これらはループをいつ停止するかを示すだけです。
実践的な例として、簡単な掛け算のパターンを作成してみましょう。
for row in 1..3
for col in 1..3
print "#{row * col} "
end
puts ""
endこれにより、3x3の商品グリッドが出力されます。printは値を同じ行に表示し、puts ""は各行が完了した後に改行します。forループの中にtimesループを入れるように、異なる種類のループを組み合わせることもできます。
チャレンジ
簡単入力から2つの整数を読み取ります:
rows- 行数cols- 列数
入れ子になったループを使って、指定された寸法のアスタリスクでできた長方形を出力します。各行には、スペースで区切られたcols個のアスタリスクを含め、各行をそれぞれ別の行に出力します。
行内のアスタリスクにはprintを使い、各行の後に次の行へ移るにはputsを使います。
たとえば、入力が3と4の場合、出力は次のようになります:
* * * *
* * * *
* * * *入力が2と5の場合、出力は次のようになります:
* * * * *
* * * * *行の最後の*の後にスペースはありません。
各ループに新しいカウンターを使い(たとえば、行にはrow、行内のアスタリスクにはcol)、それをrowsまたはcolsと比較します。rowsとcols自体は変更しないでください。各行でcolsが必要になります。
自分で試してみよう
# 入力を読み取る
rows = gets.to_i
cols = gets.to_i
# TODO: 以下にコードを書く
# ネストしたループを使って、アスタリスクで長方形を表示する
# 行内のアスタリスクは print で表示し、次の行への改行には puts を使うこのレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
基礎のすべてのレッスン
自分で練習してみよう: Rubyオンラインコンパイラ