获得第一和最后一个元素嵌套哈希
问题描述:
我使用group_by
,以小组每月energy_delta
列,所以这里从group_by
方法获得第一和最后一个元素嵌套哈希
{
"2017-04-01 00:00:00 UTC": [
{
"id": null,
"created_at": "2017-04-01T02:14:19.870Z",
"energy_delta": 1
},
{
"id": null,
"created_at": "2017-04-01T02:14:19.979Z",
"energy_delta": 3
},
{
"id": null,
"created_at": "2017-04-04T15:00:01.136Z",
"energy_delta": 10
}
],
"2017-01-01 00:00:00 UTC": [
{
"id": null,
"created_at": "2017-01-31T02:14:21.300Z",
"energy_delta": 167
},
{
"id": null,
"created_at": "2017-01-31T02:14:21.311Z",
"energy_delta": 184
},
{
"id": null,
"created_at": "2017-01-30T02:14:21.322Z",
"energy_delta": 200
}
]}
现在我有这样的嵌套散列,我想减的结果最后的energy_delta
从每个月的第一个energy_delta
开始。我怎样才能做到这一点?
答
鉴于你有你的输入存储为散列input
,你可以做这样的事情:
input.collect { |month, entries| { month => entries.first[:energy_delta] - entries.last[:energy_delta] } }
+0
谢谢,非常感谢:) –
答
如果读数已按日期排序,你可以使用:
grouped_by_month.each do |month, readings|
first_value = readings.first[:energy_delta]
last_value = readings.last[:energy_delta]
puts month
puts last_value - first_value
end
它输出:
2017-04-01 00:00:00 UTC
9
2017-01-01 00:00:00 UTC
33
如果要按日期排序,可以使用:
grouped_by_month.each do |month, readings|
sorted_readings = readings.sort_by{ |reading| reading[:created_at] }
first_value = sorted_readings.first[:energy_delta]
last_value = sorted_readings.last[:energy_delta]
puts month
puts last_value - first_value
end
它输出:
2017-04-01 00:00:00 UTC
9
2017-01-01 00:00:00 UTC
-16
你想的最后一个值或最后和第一值之间的差异?数值应该先按日期排序? –
是的,首先值将按日期排序,然后找到最后的值和第一个值之间的差值 –
好的。它不是被接受的答案。 –