的所有組合的陣列。如果我有一個數組在Ruby中,像這樣:生成一個現有的陣列
["foo", "bar", "bat"]
我怎樣可以產生價值的每一個組合新的陣列?
我需要的輸出看起來像這樣:
["foo", "bar", "bat", "foo-bar", "foo-bat", "bar-bat", "foo-bar-bat"]
順序並不重要。此外,我不需要都"foo-bar"
和"bar-foo"
。
原始數組可能有多達5-6個成員。
的所有組合的陣列。如果我有一個數組在Ruby中,像這樣:生成一個現有的陣列
["foo", "bar", "bat"]
我怎樣可以產生價值的每一個組合新的陣列?
我需要的輸出看起來像這樣:
["foo", "bar", "bat", "foo-bar", "foo-bat", "bar-bat", "foo-bar-bat"]
順序並不重要。此外,我不需要都"foo-bar"
和"bar-foo"
。
原始數組可能有多達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"]
在ruby 1.9中,你可以使用'flat_map'而不是'map' +'flatten'。 – Casper
@Casper是的,這更好,謝謝。 – steenslag
完美的作品! –