【问题标题】:access first and last element in nested hash访问嵌套哈希中的第一个和最后一个元素
【发布时间】:2017-04-09 15:49:40
【问题描述】:

我每个月都使用group_byenergy_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。我该怎么做?

【问题讨论】:

  • 你想要最后一个值还是最后一个值和第一个值之间的差异?值应该先按日期排序吗?
  • 是的,首先将值按日期排序,然后找到最后一个值和第一个值之间的差异
  • 好的。它不是公认的答案。
  • 对不起,我不小心忘记了应该先排序

标签: ruby-on-rails ruby multidimensional-array hashmap


【解决方案1】:

假设您将输入作为哈希存储在 input 中,您可以执行以下操作:

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

【讨论】:

    【解决方案2】:

    如果您的读数已经按日期排序,您可以使用:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-04-20
      • 2012-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多