2012-10-22 213 views
-1

源(已經正確地訂購):組陣列和累積值

rows = [{"key"=>[2012, 10]}, {"key"=>[2012, 9]}, {"key"=>[2011, 7]}] 

期望的結果:

[[2012, [10, 9]], [2011, [7]]] 
+2

http://meta.codereview.stackexchange.com/questions/614/do-not-prematurely-accept-answers?cb=1 – tokland

回答

1
rows.map {|row| row.values.flatten}.inject({}) {|h,r| h[r[0]].nil? ? h[r[0]] = [r[1]] : h[r[0]] << r[1];h }.to_a 
# [[2012, [10, 9]], [2011, [7]]] 

rows.map {|row| row.values.flatten}.inject({}) {|h,r| h[r[0]] ||= []; h[r[0]] << r[1];h }.to_a 
# [[2012, [10, 9]], [2011, [7]]] 
+0

我不明白爲什麼注入是必要的在這裏,group_by或chunk + map應該足夠了。看來你正在使用注入進行手動分組? – tokland

2

由於數據是預先訂購的,我們可以使用的,而不是group_by

rows.chunk { |h| h.values.first[0] }.map do |year, hs| 
    [year, hs.map { |h| h.values.first[1] }] 
end 
#=> [[2012, [10, 9]], [2011, [7]]]