在Ruby中迭代多维数组

时间:2014-03-22 16:18:06

标签: ruby arrays multidimensional-array iterator

我在Ruby on Codecademy中的多维数组中进行迭代,并遇到了一个我似乎无法找到答案的问题。因此,在他们的示例中,他们表明可以使用以下代码迭代多维数组:

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

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

这将打印出两个sub_arrays的值。但是,如果我只想显示一个sub_array,我该怎么做呢?我尝试了下面的代码但是我得到一个未定义的方法`each'为2:Fixnum错误。

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

所以,我想我的问题是为什么我的代码无法正常运行以及如何仅在索引1处打印出数组?

1 个答案:

答案 0 :(得分:3)

您的块参数按如下方式解构数组:

:each生成的枚举器按顺序生成外部数组的每个元素,然后根据块参数的结构应用模式匹配。因此,在第一次迭代中,您[1,2,3]产生了块,然后映射到numbers = 1colors = 23被忽略,因为它不适合该模式。

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

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

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

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