选择最大值和总和期间

时间:2017-10-12 03:31:38

标签: ruby-on-rails

我每隔30分钟收集一次温度。我希望按天分组并选择当天的最高温度,然后在七天内添加最高温度。

下面的代码似乎只选择了7天的最高温度,并没有将每天的最高温度相加。

通过JSON收集数据

{"status": "ok", "data": [{"temperature": 22.4, "date": "20160815-1430"}, {"temperature": 20.4, "date": "20160815-1500"}}

然后在我的控制器中

@data['data'].each do |d|
  rainTotal << [DateTime.parse(d['date']), d['temperature']]
end

@rainTotal = rainTotal.group_by{ |h| h[0] }.reject{ |k, v| !( ((7.day.ago.to_date)..(Date.now)) === k ) }.inject(0){ |sum, h| sum + h.second.max_by { |h| h[1] }[1].to_f }

1 个答案:

答案 0 :(得分:1)

当您致电rainTotal.group_by{ |h| h[0] }时,您正在按DateTime对象进行分组。如果每个日期/时间组合都是唯一的,那么结果是基本上没有分组,并且您只需得到所有温度的总和。

将该部分更改为rainTotal.group_by{ |h| h[0].to_date }应解决该特定问题。