【发布时间】: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