【问题标题】:How can I iterate through a multidimensional array without knowing it's depth?如何在不知道深度的情况下遍历多维数组?
【发布时间】:2020-10-16 11:10:07
【问题描述】:

由于我的数组的嵌套输入是可变的,它的深度也是可变的。
我知道我可以通过这种方式遍历 Ruby 中的嵌套数组:

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

但是在事先不知道它的深度的情况下,我不会以这种方式取得任何成功。
编写递归函数是唯一可能的方法吗?

【问题讨论】:

  • 快速简单的方法是在迭代之前flatten。但是,如果您需要在每次迭代中跟踪嵌套级别,您将需要一个递归解决方案。您需要块中的哪些信息?只是item?
  • 不要在标题中使用“(Ruby)”。我们可以从标签中看到它是关于 Ruby 的。
  • 在这种情况下使用递归是完全合理的。
  • @josebert :总是可以将递归解决方案更改为迭代解决方案,例如here。是否是一个好主意,是另一回事。您可能会在性能上获得一点点(但甚至不能保证这一点),但可能会降低可读性和可维护性。
  • 刚才我有了将嵌套层级存储为实例变量的想法,这样在展平时不会丢失任何信息。我正在写一个解析器

标签: arrays ruby loops recursion multidimensional-array


【解决方案1】:

不,递归不是唯一的方法。无需递归即可做到这一点。

遍历未知深度的数组嵌套与通过 DFS 遍历未知深度的节点树完全相同。

虽然 DFS 通常以递归方式表示,但您应该能够很容易地找到非递归示例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-12
    • 2020-01-12
    • 2012-06-07
    • 2018-03-26
    • 2019-06-19
    • 1970-01-01
    • 2021-07-19
    • 1970-01-01
    相关资源
    最近更新 更多