【发布时间】:2017-08-16 02:34:33
【问题描述】:
所以我一直在摸索着寻找解决方案。
我需要一种方法,该方法将获取我需要收集的product 的任意数量的数组。
1 个数组:
return [A, B, C] # => [A, B, C]
2 个数组:
return [A, B, C].product([1, 2, 3]) # => [[A, 1], [A, 2], [A, 3], [B, 1] ... [C, 3]]
3 个数组:
return [A, B, C].product([1, 2, 3,],[x, y, z]) # => [[A, 1, x], [A, 1, y], ... [C, 3, z]]
所以我目前的解决方案是这种情况下的开关,它是功能性的,但不方便。
case options.count
when 1
options[0].values
when 2
options[0].values.product(options[1].values)
when 3
options[0].values.product(options[1].values,
options[2].values)
when 4
options[0].values.product(options[1].values,
options[2].values,
options[3].values)
end
我正在寻找的是一种以程序方式或递归方式返回未知数量数组的乘积的方法。输出需要像上面的数组一样。
我试过了:
array = options[0].values
options.each_with_index do |option, i|
array = array.product(option.values) if i > 0
end
return array
但它会返回:
[[[A, 1], x], [[A, 1], y], [[A, 1], z], [[A, 2], x], ... [[C, 3], z]]
哪个值分组不正确。
【问题讨论】:
-
我对这个问题有点困惑。你不是在描述内置的
product方法吗?您正在寻找的东西有何不同?也许我是误会了。如果您正在寻找的是[1,2].product([3,4], [5,6]) # => [[1,3,5],[1,3,6],[1,4,5],[1,4,6], ...],那正是product所做的 -
我有可变数量的数组要通过
product方法,并且不知道数组的*前缀将其分隔为不同的参数,而不是数组成为第一个论据。