Menu
Coddy logo textTech

ネストしたループ

CoddyのRubyジャーニー「基礎」セクションの一部 — レッスン 46/88。

ループの中に別のループを配置して、入れ子(ネスト)になったループを作成することができます。内側のループは外側のループの各反復ごとに完全に実行されるため、このパターンはグリッド、テーブル、または組み合わせを扱う際に便利です。

for i in 1..2
  for j in 1..3
    puts "i=#{i}, j=#{j}"
  end
end

これは6行出力します。i の各値に対して、内側のループは j のすべての値を走査します。

最初に i が 1 のとき、j は 1, 2, 3 と変化します。次に i が 2 になり、j は再び 1, 2, 3 と変化します。

実践的な例として、簡単な掛け算のパターンを作成してみましょう:

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 を使用して改行してください。

例えば、入力が 34 の場合、出力は以下のようになります:

* * * *
* * * *
* * * *

入力が 25 の場合、出力は以下のようになります:

* * * * *
* * * * *

チートシート

入れ子になったループ(ネストされたループ)を使用すると、あるループの中に別のループを配置できます。外側のループが1回繰り返されるごとに、内側のループが完全に実行されます。

for i in 1..2
  for j in 1..3
    puts "i=#{i}, j=#{j}"
  end
end

これにより、合計6行が出力されます。i=1 のとき、j は 1, 2, 3 と繰り返されます。次に i=2 のとき、j は再び 1, 2, 3 と繰り返されます。

出力を同じ行に保つには print を使い、改行するには puts "" を使用します:

for row in 1..3
  for col in 1..3
    print "#{row * col} "
  end
  puts ""
end

for ループの中で times ループを使用するなど、異なる種類のループを組み合わせることもできます。

自分で試してみよう

# 入力を読み込む
rows = gets.to_i
cols = gets.to_i

# TODO: 以下にコードを記述してください
# 入れ子になったループを使用して、アスタリスクの長方形を出力します
# 行内のアスタリスクには print を使用し、次の行に移動するには puts を使用します
quiz icon腕試し

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

基礎のすべてのレッスン