将数组合并成所有可能值组合数组的单线算法?

Lan*_*ard 3 ruby algorithm

我不太确定我是否完全形成了问题,但我想要做的基本上是这样的:

# where the indices correspond to attributes fore example:
# [type, status]
x = %w(a b)
y = %w(c d)
combine(x, y) #=> [["a", "b"], ["a", "d"], ["c", "a"], ["c", "b"]]
Run Code Online (Sandbox Code Playgroud)

数组的顺序始终相同,因此每个数组的反转(例如)[b, a]不包含在结果中.

这叫做什么,实现这个的有效方法是什么?

我看到了Array#permutation,但那并不完全......

这有望适用于任意数量的数组和值: combine(*arrays)

谢谢!

更新

这是我正在寻找的更好的例子:

(x | y).combination(x.length).to_a产生以下结果:

x = ["front_door", "open"]
y = ["back_door", "closed"]
(x | y).combination(x.length).to_a
=> [["front_door", "open"], ["front_door", "back_door"], ["front_door", "closed"], ["open", "back_door"], ["open", "closed"], ["back_door", "closed"]] 
Run Code Online (Sandbox Code Playgroud)

我正在寻找的实际结果是:

=> [["front_door", "open"], ["front_door", "closed"], ["back_door", "open"], ["back_door", "closed"]]
Run Code Online (Sandbox Code Playgroud)

或者如果它是一个更长的数组:

x = ["house", "front_door", "open"]
y = ["building", "back_door", "closed"]
compute(x, y)
=> ["house", "front_door", "open"], ["house", "back_door", "open"], ["house", "front_door", "closed"], ["house", "back_door", "closed"], ["building", "front_door", "open"], ["building", "back_door", "open"], ["building", "front_door", "closed"], ["building", "back_door", "closed"]
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

ada*_*max 5


x.zip(y).reduce(:product).map(&:flatten)

对于几个阵列:


x.zip(y,z,w).reduce(:product).map(&:flatten)