阵列的所有组合

Max*_*off 2 ruby arrays algorithm combinations combinatorics

我有阵列

a = ["w1", "w2", "w3"]
Run Code Online (Sandbox Code Playgroud)

如何使用每个值组合生成新数组?我需要输出看起来像这样:

["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"]
Run Code Online (Sandbox Code Playgroud)

尝试从Generate数组中获取现有数组的所有组合的代码

结果不正确

"w1", "w2", "w3", "w1 w2", "w1 w3", "w2 w3", "w1 w2 w3"]
Run Code Online (Sandbox Code Playgroud)

hir*_*lau 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
Run Code Online (Sandbox Code Playgroud)