将哈希值更改为数组

时间:2013-07-20 20:27:37

标签: ruby-on-rails ruby arrays hash

我有一个Rails 4应用程序,用于收集教堂服务的出席情况。有几个星期有两个服务,有几个星期只有一个。我需要获得每周的总出勤率并将其显示为图表。

致电:

Stat.calculate(:sum, :attendance, group: :date)
在控制台中我已经能够以这样的哈希方式收集数据:

{Sun,2013年1月6日=> 66,Sun,2013年1月13日=> 65,Sun,2013年1月20日=> 60,Sun,2013年1月27日=> 67,Sun,2013年2月3日= > 60,Sun,2013年2月10日=> 76,Sun,2013年2月17日=> 65,Sun,2013年2月24日=> 52,Sun,2013年3月3日=> 52,Sun,2013年3月10日= > 45,Sun,2013年3月17日=> 56,Sun,2013年3月24日=> 134,Sun,2013年3月31日=> 76,Sun,2013年4月7日=> 88,Sun,2013年4月14日= > 87,Sun,2013年4月28日=> 93,Sun,2013年5月5日=> 93,Sun,2013年5月12日=> 95,Sun,2013年5月19日=> 90,Sun,2013年5月26日= > 87,Sun,2013年6月2日=> 71,Sun,2013年6月9日=> 86,Sun,2013年6月16日=> 109,Sun,2013年6月23日=> 80,Sun,2013年6月30日= > 68,Sun,2013年7月7日=> 75,Sun,2013年7月14日=> 73}

但我的图表需要的是一系列哈希形式:

{date:“Sun,2013年6月23日”,出席率:80},{日期:“太阳,2013年6月30日”,出席率:68“}

所以我试图弄清楚如何将第一种形式转换为第二种形式。

我确信这件事很简单,但我的有限的铁轨知识正在撞墙。

2 个答案:

答案 0 :(得分:5)

.collect{|key,value| {:date => key, :attendance => value} }

循环并创建一个新哈希,其中原始密钥成为日期值,原始值成为出勤值。这些新哈希被收集到一个数组中。

答案 1 :(得分:2)

您可以如下思考:

h = {"Sun, 06 Jan 2013"=>66, "Sun, 13 Jan 2013"=>65, "Sun, 20 Jan 2013"=>60 }
h.map{|k,v| Hash[:date,k,:attend,v]}
# => [{:date=>"Sun, 06 Jan 2013", :attend=>66},
#     {:date=>"Sun, 13 Jan 2013", :attend=>65},
#     {:date=>"Sun, 20 Jan 2013", :attend=>60}]
相关问题