2017-04-09 144 views
-1

我使用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開始。我怎樣才能做到這一點?

+0

你想的最後一個值或最後和第一值之間的差異?數值應該先按日期排序? –

+0

是的,首先值將按日期排序,然後找到最後的值和第一個值之間的差值 –

+0

好的。它不是被接受的答案。 –

回答

3

鑑於你有你的輸入存儲爲散列input,你可以做這樣的事情:

input.collect { |month, entries| { month => entries.first[:energy_delta] - entries.last[:energy_delta] } } 
+0

謝謝,非常感謝:) –

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 
相關問題