2009-08-11 74 views
1

我有這樣的結構:棘手變換散列 - >陣列

{:foo => ['foo1', 'foo2'], :bar => ['bar1']} 

,我想已轉化爲:

[[:foo, "foo1"], [:foo, "foo2"], [:bar, "bar1"]] 

我的當前的解決方案是必要的:

result = [] 
h.each do |k,v| 
    v.each do |value| 
    result << [k, value] 
    end 
end 

雖然這個工作,我相信有一個更優雅的方式來寫這個,但我不明白。我想知道面向功能的解決方案是什麼樣子的?

回答

7
h.inject([]) do |arr, (k,v)| 
    arr + v.map {|x| [k,x] } 
end 
+0

那麼簡單。謝謝! – troelskn 2009-08-11 13:37:18

0

這樣的事情呢?我希望有些東西可以添加一堆數組,但我不知道,所以我實現了我自己的。

class Array 
    def concatArrays # concatenates an array of arrays 
    inject([]) {|acc, x| acc + x} 
    end 
end 

h.collect{|k,v| v.collect{|value| [k,value]}}.concatArrays