Menu
Coddy logo textTech

よくある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, 9

Transpose:Ruby にはこれが組み込まれています。行が列になり、その逆も同様です:

matrix.transpose
# [[1, 4, 7], [2, 5, 8], [3, 6, 9]]

これらを名前で知っておくと、同じネストしたループを書き直さずに済みます。

challenge icon

チャレンジ

簡単

正方形の matrix が与えられます(n × n)。理論のパターンから導かれる次の3行を出力してください:

  1. Anti-diagonal sum: <n>r + c == matrix.length - 1 となるセルの sum
  2. Column sums: [...]:各 column の sum。ヒント:まず transpose し、次に各 row をその sum に map し、その後 inspect を使います
  3. 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
quiz icon腕試し

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

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

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