Menu
CoddyTech

常见二维数组模式

本课属于 Coddy Ruby 学习旅程的“逻辑与流程”单元。第 13 课,共 56 课。

有些二维数组操作经常出现,值得记住它们的名称。

求出每个单元格的总和:将网格展平成一维数组,然后调用 sum:

grid = [[1, 2], [3, 4]]
puts grid.flatten.sum  # 10

主对角线:行索引等于列索引的单元格(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

转置: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 的单元格之和
  2. Column sums: [...],每一列的和。提示:先转置,然后将每一行映射为它的和,最后使用 inspect
  3. Symmetric: true 或 false:矩阵是否等于它自身的转置?

默认矩阵的输出为:

Anti-diagonal sum: 15
Column sums: [12, 15, 18]
Symmetric: false

亲手试试

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

# TODO: 计算副对角线之和,通过转置计算各列之和,检查是否对称
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

逻辑与流程中的所有课

自己练习: Ruby 在线编译器