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このスタイルは、手動でインデックスを追跡するよりも短く安全であり、行の末尾を超えてしまうリスクもありません。
チャレンジ
簡単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をネストして、行の平均より大きいセルを出力する
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。