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

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 
関連する問題