我需要一个图表的值,我想要合并所有具有相同日期的值。
这是我现在拥有的数组:
[ ['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] ]有没有简单的方法可以做到这一点?
发布于 2012-10-11 07:43:18
就这么简单:
a.inject({}) { |h,(date, count)| h[date] ||= 0; h[date] += count; h }.to_a发布于 2012-10-11 06:45:02
使用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-11 06:59:14
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 == expectedhttps://stackoverflow.com/questions/12829450
复制相似问题