Menu
CoddyTech

遍历二维数组

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

要遍历二维数组中的每个单元格,你需要嵌套两个循环。外层循环遍历各行,内层循环遍历该行中的各列。

最符合 Ruby 惯用写法的模式是使用两次 each:

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

挑战

简单

给定二维数组 grid(3 行 × 3 列,元素均为整数)。

对于每一行,找出所有值严格大于该行平均值的单元格。将每个这样的单元格单独打印在一行中,格式如下:

(r,c) = value

使用嵌套的 each_with_index。在外层循环中计算平均值,这样每一行的阈值都是独立的。

对于默认网格,大于所在行平均值的单元格为:

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

亲手试试

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

# TODO:嵌套使用 each_with_index,打印大于所在行平均值的单元格
quiz icon自我测试

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

逻辑与流程中的所有课

自己练习: Ruby 在线编译器