我有这样的结构:
{: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
虽然这有效,但我确信有更优雅的方式来写这个,但我无法弄清楚。我想知道面向功能的解决方案是什么样的?
答案 0 :(得分:7)
h.inject([]) do |arr, (k,v)|
arr + v.map {|x| [k,x] }
end
答案 1 :(得分: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