遍历二维数组
本课属于 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这种写法比手动跟踪索引更简洁、更安全,也不会有超出一行末尾的风险。
挑战
简单给定二维数组 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,打印大于所在行平均值的单元格
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
逻辑与流程中的所有课
自己练习: Ruby 在线编译器