2014-10-06 104 views
0

的陣列的組合我有一個數組,如:創建散列

hasharray=[{"a" => "b" } , {"c" => "d"} , {"e" => "f"}] 

我想創建長度min的這個陣列散列的所有組合來max

例如,對於min=0max=2,代碼應該返回:

resultarray=[ 
{}, 
{"a" => "b" }, 
{"c" => "d"}, 
{"e" => "f"}, 
{"a" => "b" } , {"c" => "d"}, 
{"c" => "d"} , {"e" => "f"}, 
{"a" => "b" },{"e" => "f"} 
] 

我該怎麼辦呢?

+1

也許有一個更簡單的方法。你想做什麼? – Stefan 2014-10-06 13:25:53

+1

我想你可能會對哈希如何工作感到困惑。散列值存儲*許多*鍵值對。瞭解更多關於你想要做什麼會有很大幫助,但我認爲你的數據結構首先需要進行一些調整。 – 2014-10-06 13:40:59

回答

2
min = 0 
max = 2 
min.upto(max).flat_map {|n| hasharray.combination(n).to_a } 
# => [ 
# [], 
# [{"a"=>"b"}], [{"c"=>"d"}], [{"e"=>"f"}], 
# [{"a"=>"b"}, {"c"=>"d"}], [{"a"=>"b"}, {"e"=>"f"}], [{"c"=>"d"}, {"e"=>"f"}] 
# ] 
+0

我沒有看到你的答案如何產生OP的結果? – Surya 2014-10-06 13:22:16

+0

我想他忘記了用數字表示數組,否則這個問題沒有多大意義。你甚至想過可以用代碼做什麼?只是返回一個像發佈的操作數組是無用的,但是他通過將哈希放在不同的行上進行了正確的分組。 – 2014-10-06 13:25:25

+3

@Surya在我看來,最糟糕的答案是由那些沒有回頭看這個問題的人發現,並找出OP真正需要的東西。通常,答案只是圍繞產生OP所要求的結果,儘管這通常不是最好的解決方案。如果你不明白問題是什麼,請不要低估。 – 2014-10-06 13:27:57