阵列的所有组合

时间:2014-01-21 12:46:01

标签: ruby arrays algorithm combinations combinatorics

我有阵列

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"]

1 个答案:

答案 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