3

グラフの値を設定する必要があり、同じ日付のすべての値をマージする必要があります。

これは私が今持っている配列です:

[ ['2012-10-09', 1], ['2012-10-09', 2], ['2012-10-10', 1], ['2012-10-10', 4], ['2012-10-10', 1], ['2012-10-11', 3] ]

そして私が望む結果:

[ ['2012-10-09', 3], ['2012-10-10', 6], ['2012-10-11', 3] ]

これを行う簡単な方法はありますか?

4

4 に答える 4

4

そのような単純な:

a.inject({}) { |h,(date, count)| h[date] ||= 0; h[date] += count; h }.to_a
于 2012-10-10T23:43:17.770 に答える
3

railsのgroup_byを使用すると、次のことができます。

x = [ ['2012-10-09', 1], ['2012-10-09', 2], ['2012-10-10', 1], ['2012-10-10', 4], ['2012-10-10', 1], ['2012-10-11', 3] ]
x.group_by(&:first).map { |k, v| [k, v.map(&:last).inject(0,&:+)] }
于 2012-10-10T22:45:01.727 に答える
1

Mapreduceは非常に強力なツールですが、理解するのが少し複雑です。したがって、sumメソッドを使用しても同じです。

x = [ ['2012-10-09', 1], ['2012-10-09', 2], ['2012-10-10', 1], ['2012-10-10', 4], ['2012-10-10', 1], ['2012-10-11', 3] ]
expected = [ ['2012-10-09', 3], ['2012-10-10', 6], ['2012-10-11', 3] ]

x.group_by(&:first).map { |k, v| [k, v.sum(&:last)] }.should == expected
于 2012-10-10T22:59:14.420 に答える
0

ローマの答えに似ていますが、三項演算子を使用しています

a.inject({}) { |h,(date,count)| h.has_key?(date) ? h[date] += count : h[date] = count; h }.to_a
于 2012-10-11T04:25:39.257 に答える