【问题标题】:All combinations of array数组的所有组合
【发布时间】:2014-02-11 01:45:20
【问题描述】:

我有数组

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

【问题讨论】:

  • 这不是错误的——它只是给出了没有重复的组合。而且您要求的是重复组合。

标签: ruby arrays algorithm combinations combinatorics


【解决方案1】:

这是一种方法,但是这个结果有“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

【讨论】:

  • 我不认为这是排列的任务,而是组合(重复)的任务。
  • 在原始问题中,提供的所需输出包括许多具有相同项目但顺序不同的项目。例如,该列表包含“w2 w3”和“w3 w2”。因此,重复组合不是要走的路,因为它只会添加其中一个。
  • 是的。我已经滑动了预期的输出,它有不同顺序的变化。应用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-25
相关资源
最近更新 更多