我有阵列
a = ["w1", "w2", "w3"]
如何使用每个值组合生成新数组? 我需要输出看起来像这样:
["w1", "w2", "w3", "w1 w1", "w1 w2", "w1 w3", "w2 w1", "w2 w2", "w2 w3", "w3 w1", "w3 w2", "w3 w3", "w1 w1 w1", "w1 w1 w2", "w1 w1 w3", "w1 w2 w1", "w1 w2 w2", "w1 w2 w3", "w2 w1 w1", "w2 w1 w2", "w2 w1 w2", "w2 w1 w3", "w2 w2 w1", "w2 w2 w2", "w2 w2 w3", "w2 w3 w1", "w2 w3 w2", "w2 w3 w3", "w3 w1 w1", "w3 w1 w2", "w3 w1 w3", "w3 w2 w1", "w3 w2 w2", "w3 w2 w3", "w3 w3 w1", "w3 w3 w2", "w3 w3 w2"]
尝试Generate array of all combinations of an existing array
中的代码结果不正确
"w1", "w2", "w3", "w1 w2", "w1 w3", "w2 w3", "w1 w2 w3"]
答案 0 :(得分:5)
这是一种方法,但是这个结果有“w3 w3 w3”而你想要的结果没有,但是我没有看到包含“w3 w3”和“w1 w1 w1”而不是“w3”的逻辑w3 w3“,所以我假设你错过了添加它。
您所寻找的不是组合,而是排列(重复):
a = ["w1", "w2", "w3"]
result = (1..a.size).flat_map do |size|
a.repeated_permutation(size).map { |perm| perm.join(' ') }
end