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

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

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

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

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

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

订单并不重要。 另外,我不需要"foo-bar""bar-foo"

原始arrays最多可包含5-6个成员。

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

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

 arr = %w(foo bar bat) arr.product(arr).collect{|el| el.uniq.join("-")}