Menu
CoddyTech

ネストしたループ

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ループを入れるように、異なる種類のループを組み合わせることもできます。

challenge icon

チャレンジ

簡単

入力から2つの整数を読み取ります:

  1. rows - 行数
  2. 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 を使う
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

基礎のすべてのレッスン

自分で練習してみよう: Rubyオンラインコンパイラ