我不太确定我是否完全形成了问题,但我想要做的基本上是这样的:
# 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)
有任何想法吗?
x.zip(y).reduce(:product).map(&:flatten)
对于几个阵列:
x.zip(y,z,w).reduce(:product).map(&:flatten)