gpt4 book ai didi

Ruby:标准递归模式

转载 作者:数据小太阳 更新时间:2023-10-29 07:11:40 25 4
gpt4 key购买 nike

我经常迷上 ruby​​ 的一件事是递归模式。例如,假设我有一个数组,它可能包含无限深度的数组作为元素。所以,例如:

my_array = [1, [2, 3, [4, 5, [6, 7]]]]

我想创建一个方法,可以将数组展平为 [1, 2, 3, 4, 5, 6, 7]

我知道 .flatten 可以完成这项工作,但这个问题是作为我经常遇到的递归问题的一个例子 - 因此我试图找到一个更可重用的解决方案。

简而言之 - 我猜这种事情有一个标准模式,但我想不出任何特别优雅的东西。任何想法表示赞赏

最佳答案

递归是一种方法,它不依赖于语言。您在编写算法时要考虑两种情况:再次调用函数的情况(递归情况)和破坏函数的情况(基本情况)。例如,要在 Ruby 中进行递归展平:

class Array
def deep_flatten
flat_map do |item|
if item.is_a?(Array)
item.deep_flatten
else
[item]
end
end
end
end

[[[1]], [2, 3], [4, 5, [[6]], 7]].deep_flatten
#=> [1, 2, 3, 4, 5, 6, 7]

这有帮助吗?无论如何,这里显示的一个有用的模式是当你在数组上使用 recusion 时,你通常需要 flat_map(each + concat 的功能替代/推送).

关于Ruby:标准递归模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10681012/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com