在Ruby中遍历多维数组

3

我正在 Codecademy 上学习 Ruby 中的多维数组迭代,并遇到了一个问题,似乎找不到答案。在他们的示例中,他们展示了可以使用以下代码迭代多维数组:

things = [[1,2,3], ["red", "blue"]]

things.each do |sub_array|
    sub_array.each do |item|
      puts item
    end
end

这段代码输出了两个 sub_array 的值。但是,如果我只想显示一个 sub_array,我该怎么做?我尝试了以下代码,但出现了“undefined method `each' for 2:Fixnum ”的错误。

things = [[1,2,3], ["red", "blue"]]
    things.each do |numbers, colors|
      colors.each { |item| puts item }
    end

所以,我想问的是为什么我的代码不能正常运行,我该如何打印出仅位于索引1的数组?


2
首先选择您想要打印的子数组,然后将其打印出来。例如,如果您想要打印颜色数组,things[1] => ["red", "blue"](或 things.last),那么请打印 things[1] - Cary Swoveland
1个回答

4

你的块参数按照以下方式解构数组:

:each 生成的枚举器按顺序逐个生成外部数组中的每个元素,然后基于块参数的结构应用模式匹配。因此,在第一次迭代中,你有 [1,2,3] 被传递到块中,然后映射为 numbers = 1colors = 2。因为 3 不符合模式,所以被忽略了。

如果你只想显示一个子数组,你不需要遍历整个数组 - 只需通过索引获取所需的元素(如果你知道索引是什么):

things[1].each {|color| ... }

或者,您可以以类似的方式将其分配给变量。只要您知道颜色始终位于第二个位置,您可以这样做:

_, colors = *things
colors.each {|color| ... }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接