Ruby on rails rails中的数组和

Ruby on rails rails中的数组和,ruby-on-rails,arrays,Ruby On Rails,Arrays,我有一个数组 [#<Data id: 1, date: "2016-01-06", value: "1">, #<Data id: 2, date: "2015-12-31", value: "3">, #<Data id: 3, date: "2016-01-06", value: "6">...] 等等 我想对具有相同日期的值求和 i、 这里第一条和第三条记录的日期相同,因此结果数组将给出 #<Data id: 1, date: "2016-

我有一个数组

[#<Data id: 1, date: "2016-01-06", value: "1">,
 #<Data id: 2, date: "2015-12-31", value: "3">,
 #<Data id: 3, date: "2016-01-06", value: "6">...]
等等

我想对具有相同日期的值求和

i、 这里第一条和第三条记录的日期相同,因此结果数组将给出

 #<Data id: 1, date: "2016-01-06", value: "1">,
 #<Data id: 3, date: "2016-01-06", value: "7">,

您可以在模型上使用sql groupping:

Data.where(date:(42.days.ago..Date.today)).group(:date).sum(:value)
这将返回一个哈希值{date=>sum}

在阵列上:

Hash[your_array.group_by(&:date).map{|k,v| [k, v.sum(&:value)]}]

嘿,若您已经从数据库中获取了一个数组,那个么可以使用try这个方法

  arr.group_by{|a| a.date.to_date}.map{|k,v| {k => v.map(&:value).sum()}}
如果您不打算从数据库中获取数组/活动记录,则可以直接使用数据库查询作为 如果数据库只存储日期,则可以使用

Model.group("date").sum(:value)
如果您的数据库在这里存储日期和时间,我可以使用date\u格式函数跳过日期的时间部分

  Model.group("DATE_FORMAT(date, '%Y%m%d')").sum(:value)
sum=Hash.new0

数组.每个do |数据|

  <p>sum[data[:date]] += data[:value]</p>
结束

=>{:id=>1,2011年5月4日星期三=>300,2011年5月3日星期二=>450…}

=>如果您希望使用与开始时相同的数组格式:

new_array=sum.collect{| key,value{:date=>key,:value=>value}


=>[{:id=>1,:date=>Wed,2011年5月4日,:value=>300},{…}]

他们尝试按{a | a.date.to | date}将其分组为arr.group(按{a | a.date.to |日期)将其分组为arr.group(u{u |按{a | a.date a.date a.date a.date k{v 1240}s{s{p}映射}k{你试过这个吗?在ruby类型中,它给出了NoMethodError:arrayNot的未定义方法“group”在数组上不能。是的,这个方法应该可以工作-Data.all.group_by{a | a.date.to _date}.map{k,v |{k=>v.map&:value.sum}