2009-08-11 43 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