在Ruby中迭代多维数组

在Ruby中迭代多维数组,ruby,arrays,multidimensional-array,iterator,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 这将打印出两个子数组的值。但是,如果我只想显示一个子数组,我将如何进行呢?我已经尝试了以下代

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

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

things.each do |sub_array|
    sub_array.each do |item|
      puts item
    end
end
这将打印出两个子数组的值。但是,如果我只想显示一个子数组,我将如何进行呢?我已经尝试了以下代码,但是我得到了一个未定义的方法'each',用于2:Fixnum错误

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

因此,我想我的问题是为什么我的代码不能正常运行,以及我将如何仅打印索引1处的数组?

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

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

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

或者,您可以用类似的方式将其分配给变量。只要您知道颜色将始终位于第二个位置,就可以执行以下操作:

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

首先选择要打印的子阵列,然后打印它。例如,如果要打印颜色数组,
things[1]=>[“red”、“blue”]
(或
things.last
),则打印
things[1]
_, colors = *things
colors.each {|color| ... }