Menu
Coddy logo textTech

2次元配列の反復処理

CoddyのRubyジャーニー「ロジックとフロー」セクションの一部 — レッスン 12/56。

2次元配列のすべてのセルを走査するには、2つの反復処理を入れ子にします。外側のループが行を走査し、内側のループがその行の列を走査します。

最も慣用的なRubyのパターンでは、eachを2回使用します:

grid = [
  [1, 2, 3],
  [4, 5, 6]
]

grid.each do |row|
  row.each do |cell|
    puts cell
  end
end
# 1, 2, 3, 4, 5, 6  (それぞれが独立した行に出力されます)

各セルにラベルを付ける場合など、行と列のインデックスも必要な場合は、両方のレベルで each_with_index を使用します:

grid.each_with_index do |row, r|
  row.each_with_index do |cell, c|
    puts "(#{r},#{c}) = #{cell}"
  end
end

このスタイルは、手動でインデックスを追跡するよりも短く安全であり、行の末尾を超えてしまうリスクもありません。

challenge icon

チャレンジ

簡単

2次元配列 grid が与えられています(整数の3行×3列)。

各行について、その値がその行の平均値よりも厳密に大きいすべてのセルを見つけてください。そのような各セルを、次の形式でそれぞれの行に出力してください:

(r,c) = value

入れ子になった each_with_index を使用してください。各行のしきい値が独立するように、外側のループ内で平均値を計算してください。

デフォルトのグリッドにおいて、行の平均値を超えるセルは以下の通りです:

(0,1) = 8
(1,2) = 9
(2,0) = 6
(2,1) = 7

チートシート

2次元配列のすべてのセルを反復処理するには、2つのeach呼び出しをネストします:

grid.each do |row|
  row.each do |cell|
    puts cell
  end
end

行と列のインデックスにもアクセスするには、両方のレベルでeach_with_indexを使用します:

grid.each_with_index do |row, r|
  row.each_with_index do |cell, c|
    puts "(#{r},#{c}) = #{cell}"
  end
end

自分で試してみよう

grid = [
  [1, 8, 3],
  [4, 5, 9],
  [6, 7, 2]
]

# TODO: each_with_indexをネストして、行の平均より大きいセルを出力する
quiz icon腕試し

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

ロジックとフローのすべてのレッスン