生成现有数组的所有组合的数组

时间:2012-06-05 15:55:55

标签: ruby-on-rails ruby algorithm

如果我在Ruby中有一个数组,就像这样:

["foo", "bar", "bat"]

如何使用每个值组合生成一个新数组?

我需要输出看起来像这样:

["foo", "bar", "bat", "foo-bar", "foo-bat", "bar-bat", "foo-bar-bat"]

订单并不重要。此外,我不需要 {/ 1>}和"foo-bar"

原始阵列最多可包含5-6名成员。

2 个答案:

答案 0 :(得分:5)

ar = ["foo", "bar", "bat"]
p 1.upto(ar.size).flat_map {|n| ar.combination(n).map{|el| el.join('-')}}
#=>["foo", "bar", "bat", "foo-bar", "foo-bat", "bar-bat", "foo-bar-bat"]

答案 1 :(得分:2)

您可以尝试查看两个数组的交叉产品

arr = %w(foo bar bat)

arr.product(arr).collect{|el| el.uniq.join("-")}