【问题标题】:Iterating Over Multidimensional Arrays in Ruby在 Ruby 中迭代多维数组
【发布时间】:2014-03-22 16:18:05
【问题描述】:

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

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

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

这会打印出两个子数组的值。但是,如果我只想显示一个 sub_array,我该怎么做呢?我已经尝试了以下代码,但我得到了一个未定义的方法 `each' 用于 2:Fixnum 错误。

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

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

【问题讨论】:

  • 先选中要打印的子数组,然后打印。例如,如果您想打印颜色数组things[1] => ["red", "blue"](或things.last),则打印things[1]。

标签: ruby arrays multidimensional-array iterator


【解决方案1】:

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

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 2014-01-13
    • 2023-03-08
    • 2014-05-17
    • 1970-01-01
    • 2012-10-04
    • 1970-01-01
    • 2021-11-02
    相关资源
    最近更新 更多