哈希 - >数组的棘手变换

tro*_*skn 1 ruby arrays hash functional-programming

我有这样的结构:

{:foo => ['foo1', 'foo2'], :bar => ['bar1']}
Run Code Online (Sandbox Code Playgroud)

我想转变成:

[[:foo, "foo1"], [:foo, "foo2"], [:bar, "bar1"]]
Run Code Online (Sandbox Code Playgroud)

我目前的解决方案势在必行:

result = []
h.each do |k,v|
  v.each do |value|
    result << [k, value]
  end
end
Run Code Online (Sandbox Code Playgroud)

虽然这有效,但我确信有更优雅的方式来写这个,但我无法弄清楚.我想知道面向功能的解决方案是什么样的?

sep*_*p2k 7

h.inject([]) do |arr, (k,v)|
  arr + v.map {|x| [k,x] }
end
Run Code Online (Sandbox Code Playgroud)