在一个数组中计算数组乘积

7
为了在Ruby中计算笛卡尔积,可以使用Array#product方法。如果我有一个数组的数组并想要计算它们的积,应该如何写语法?
[[1,2],[3,4],[5,6]] => [[1,3,5], [2,3,5], ...]

我不确定,因为在Ruby文档中product方法被定义为任意数量的参数,所以仅仅将我的数组作为参数传递是不够的,就像这样:

[].product(as) => [

我该如何解决这个问题?

2个回答

11

该方法接受多个参数,但不接受包含参数的数组。因此,您需要以这种方式使用它:

[1,2].product [3,4], [5,6]
如果as是你的数组数组,你需要像这样“展开”它:

如果as是你的数组嵌套,则需按以下方式“展开”:

返回:

如果as是你的数组嵌套,则需按以下方式“展开”:

as[0].product(*as[1..-1])

"[].product(*as)" 总是生成一个空数组,这很遗憾,因为如果不必将其中一个数组作为第一个对象绘制出来,那么执行 OP 所要求的操作会更好。 - Kal
1
这里有一个相关的讨论链接,其中一些人主张使用类方法,例如Array.product(*arrays)。我认为这会很有用,但我猜它没有实现。 - Kal
3
(as[0]).product(*as.drop(1)) 这个版本可以运行。 - reducing activity
Mateusz Konieczny,谢谢您的改进!我只是稍微变换了一下风格。 - J-_-L

2

我能找到的最接近的表示方法是:

:product.to_proc.call(*as)

# shorthand
:product.to_proc.(*as)
:product.to_proc[*as]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接