【问题标题】:manipulate ruby hashes to generate data series操作 ruby​​ 哈希以生成数据系列
【发布时间】:2017-04-24 15:18:15
【问题描述】:

我从下面这样的代码中得到哈希

{"Jan 2016"=>4649, "Feb 2016"=>3945, "Mar 2016"=>4870, "Apr 2016"=>4872,
"May 2016"=>6494, "Jun 2016"=>4981, "Jul 2016"=>9949, "Aug 2016"=>4842,
"Sep 2016"=>5820, "Oct 2016"=>4934, "Nov 2016"=>4136, "Dec 2016"=>8856,
"Jan 2017"=>3762, "Feb 2017"=>3261, "Mar 2017"=>2185, "Apr 2017"=>702}

这个由代码生成的哈希

@bookings.group_by_month(:check_in_date, format: "%b %Y").sum(:total_night)

我正在使用此代码使用 chartkick 生成图表,我想按季度对其进行分组以生成数据系列,以便我可以为每个系列赋予不同的颜色,

预期输出是

[
  {name: "Q1",data: {"Jan 2016"=>4649, "Feb 2016"=>3945, "Mar 2016"=>4870}},
  {name: "Q2",data: {"Apr 2016"=>4872, "May 2016"=>6494, "Jun 2016"=>4981}}
  …
]

【问题讨论】:

  • 明白了! {name: "Q1",data: {"Jan 2016"=>4649, "Feb 2016"=>3945, "Mar 2016"=>4870}}这对你有好处吗?
  • 是的,没关系 Q5,因为我只是用它来改变颜色
  • 你为什么不这样做?有什么问题吗?
  • 我想知道如何修改我的代码 @bookings.group_by_month(:check_in_date, format: "%b %Y").sum(:total_night) ,而不是使用我编写的示例数据,
  • 请阅读“How to Ask”,包括链接页面“minimal reproducible example”和“How much research effort is expected of Stack Overflow users?”。我们希望看到你努力的证据。你尝试了什么?你搜索并没有找到任何东西?你找到了东西,但它没有帮助?你试过写代码吗?如果不是,为什么?如果是这样,显示您尝试了什么以及为什么它不起作用的最小代码示例是什么?没有它,您似乎没有尝试并希望我们为您编写它。

标签: ruby chartkick ruby-hash


【解决方案1】:
a.group_by { |k, v| [Date.parse(k).year, ((Date.parse(k).month - 1) / 3) + 1] }
 .map { |k, v| { quarter: k, data: v.to_h} }
# [
#   {:quarter=>[2016, 1], :data=>{"Jan 2016"=>4649, "Feb 2016"=>3945, "Mar 2016"=>4870}},
#   {:quarter=>[2016, 2], :data=>{"Apr 2016"=>4872, "May 2016"=>6494, "Jun 2016"=>4981}},
#   {:quarter=>[2016, 3], :data=>{"Jul 2016"=>9949, "Aug 2016"=>4842, "Sep 2016"=>5820}},
#   {:quarter=>[2016, 4], :data=>{"Oct 2016"=>4934, "Nov 2016"=>4136, "Dec 2016"=>8856}},
#   {:quarter=>[2017, 1], :data=>{"Jan 2017"=>3762, "Feb 2017"=>3261, "Mar 2017"=>2185}},
#   {:quarter=>[2017, 2], :data=>{"Apr 2017"=>702}}
# ]

【讨论】:

  • 感谢完整的代码,尤其是第二行
【解决方案2】:

假设所有月份的数据都在那里:

input.each_slice(3)
     .map
     .with_index(1) { |a, i| { name: "Q#{i}", data: a.to_h } }

【讨论】:

  • 不错的解决方案! :)
猜你喜欢
  • 1970-01-01
  • 2016-10-06
  • 1970-01-01
  • 2021-12-07
  • 1970-01-01
  • 2017-01-16
  • 2015-01-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多