gpt4 book ai didi

Ruby 假设——变量嵌套循环

转载 作者:太空宇宙 更新时间:2023-11-03 17:16:53 26 4
gpt4 key购买 nike

这只是一个思考练习,我会对任何意见感兴趣。尽管如果它有效,我可以想出一些我会使用它的方法。

传统上,如果你想对由数组或范围等形成的嵌套循环的结果执行一个函数,你会这样写:

def foo(x, y)
# Processing with x, y
end

iterable_one.each do |x|
iterable_two.each do |y|
my_func(x, y)
end
end

但是,如果我必须添加另一层嵌套怎么办。是的,我可以添加一个额外的循环级别。在这一点上,让我们让 foo 接受可变数量的参数。

def foo(*inputs)
# Processing with variable inputs
end

iterable_one.each do |x|
iterable_two.each do |y|
iterable_three.each do |z|
my_func(x, y, x)
end
end
end

现在,假设我需要添加另一个 嵌套级别。在这一点上,它变得非常粗糙。

因此,我的问题是:是否可以编写如下内容?

[iterable_one, iterable_two, iterable_three].nested_each(my_func)

或许

[iterable_one, iterable_two, iterable_three].nested_each { |args| my_func(args) }

也许将参数作为实际参数传递是不可行的,您可以将数组传递给 my_func,其中包含来自可枚举组合的参数吗?

我很想知道这是否可能,这可能不太可能发生,但在我想到之后我想知道。

最佳答案

Array.product 产生枚举的组合,就像它们在嵌套循环中一样。它需要多个参数。演示:

a = [1,2,3]
b = %w(a b c)
c = [true, false]

all_enums = [a,b,c]
all_enums.shift.product(*all_enums) do |combi|
p combi
end


#[1, "a", true]
#[1, "a", false]
#[1, "b", true]
#...

关于Ruby 假设——变量嵌套循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15120510/

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