よくある2次元パターン
CoddyのRubyジャーニー「ロジックとフロー」セクションの一部。レッスン 13/56。
一部の2次元配列の操作は非常によく登場するため、名前を覚えておく価値があります。
すべてのセルの合計: grid を 1D 配列に flatten して、sum を呼び出します:
grid = [[1, 2], [3, 4]]
puts grid.flatten.sum # 10主 diagonal:行インデックスが列インデックスと等しいセル(matrix[i][i]):
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
(0...matrix.length).each do |i|
puts matrix[i][i]
end
# 1, 5, 9Transpose:Ruby にはこれが組み込まれています。行が列になり、その逆も同様です:
matrix.transpose
# [[1, 4, 7], [2, 5, 8], [3, 6, 9]]これらを名前で知っておくと、同じネストしたループを書き直さずに済みます。
チャレンジ
簡単正方形の matrix が与えられます(n × n)。理論のパターンから導かれる次の3行を出力してください:
Anti-diagonal sum: <n>:r + c == matrix.length - 1となるセルの sumColumn sums: [...]:各 column の sum。ヒント:まず transpose し、次に各 row をその sum に map し、その後inspectを使いますSymmetric: trueまたはfalse:matrix は自身の transpose と等しいですか?
デフォルトの matrix の出力は次のとおりです:
Anti-diagonal sum: 15
Column sums: [12, 15, 18]
Symmetric: false自分で試してみよう
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
# TODO: anti-diagonal sum, column sums via transpose, symmetric check
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
ロジックとフローのすべてのレッスン
自分で練習してみよう: Rubyオンラインコンパイラ