Arrays 如何在不知道多维数组的情况下遍历它';深度是多少?

Arrays 如何在不知道多维数组的情况下遍历它';深度是多少?,arrays,ruby,loops,recursion,multidimensional-array,Arrays,Ruby,Loops,Recursion,Multidimensional Array,因为数组的嵌套输入是可变的,所以它的深度也是可变的 我知道我可以通过以下方式在Ruby中迭代嵌套数组: s.each do |sub_array| sub_array.each do |item| puts item end end 但是如果事先不知道它的深度,我就不会通过这种方式取得任何成功 是编写递归函数的唯一可能的方法吗?不,递归不是唯一的方法。不需要递归就可以做到这一点 迭代未知深度的数组嵌套与DFS遍历未知深度的节点树完全相同 虽然DFS通常以递归方式

因为数组的嵌套输入是可变的,所以它的深度也是可变的
我知道我可以通过以下方式在Ruby中迭代嵌套数组:

s.each do |sub_array|
    sub_array.each do |item|
        puts item
    end
end
但是如果事先不知道它的深度,我就不会通过这种方式取得任何成功

是编写递归函数的唯一可能的方法吗?

不,递归不是唯一的方法。不需要递归就可以做到这一点

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


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

不,递归不是唯一的方法。不需要递归就可以做到这一点

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


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

快速简便的方法是在迭代之前将其展平。但如果您需要在每次迭代中跟踪嵌套级别,则需要一个递归解决方案。在这个街区你需要什么信息?只需
?不要在标题中使用“(Ruby)”。我们可以从标签中看出它是关于Ruby的。在这种情况下使用递归是完全合理的。@josebert:将递归解决方案更改为迭代解决方案总是可能的,例如,请参见。这是否是一个好主意,则是另一回事。您可能会在性能上获得一点提高(但这并不能保证),但可能会降低可读性和可维护性。刚才我想到了将嵌套级别存储为实例变量,这样在展开时就不会丢失任何信息。我正在编写一个解析器btwFast&简单的方法是在迭代之前将其展平。但如果您需要在每次迭代中跟踪嵌套级别,则需要一个递归解决方案。在这个街区你需要什么信息?只需
?不要在标题中使用“(Ruby)”。我们可以从标签中看出它是关于Ruby的。在这种情况下使用递归是完全合理的。@josebert:将递归解决方案更改为迭代解决方案总是可能的,例如,请参见。这是否是一个好主意,则是另一回事。您可能会在性能上获得一点提高(但这并不能保证),但可能会降低可读性和可维护性。刚才我想到了将嵌套级别存储为实例变量,这样在展开时就不会丢失任何信息。顺便说一句,我正在写一个解析器