我正在尝试创建一个可以传递给GCharts的数组,以显示日期与日期发生的次数。
我可以创建一个hash,但是如何创建一个包含日期和计数的简单数组。
我尝试将代码转换为数组(to_a
),但数组太嵌套了。 @results是一个活动的记录关系,它包含一系列记录。
@values = @results.map{|x| [x.start_time.strftime('%F')]}.reduce(Hash.new(0)) { |a, b| a[b] += 1; a }
Hash (5 elements)
["2016-03-07"] = 3
["2016-03-06"] = 4
["2016-03-05"] = 10
["2016-03-04"] = 1
["2016-03-03"] = 22
但我想要一个这样的数组:数组中的每个元素都应该有2个元素。
[0] should have ["2016-03-07"][3]
[1] should have ["2016-03-06"][4]
[2] should have ["2016-03-05"][10]
等
这是我想要的数组,但我只需要执行日期计数并将计数作为数组中的第二个元素:
@results.map{|x| [x.start_time.strftime('%F'), x.build_number]}
我就是这样做的,我相信没有循环就有更好的方法:
builds_per_day = @results.map{|x| [x.start_time.strftime('%F')]}.reduce(Hash.new(0)) { |a, b| a[b] += 1; a }
@array_of_builds_per_day =[]
builds_per_day.each do |key, value|
@array_of_builds_per_day<< [key[0].to_s,value]
end
为混乱道歉
答案 0 :(得分:0)
我不确定我是否正确理解了您的问题,但如果我这样做,我相信打电话给__会产生类似
的内容[["2016-03-07",3],["2016-03-06", 4]]
你想要
["2016-03-07",3,"2016-03-06", 4]
代替? 如果是这样,调用.to_a.flatten就是你想要的
答案 1 :(得分:0)
我无法正确理解你的问题,但如果你想要
{"2016-03-13"=>19, "2016-03-14"=>1}
而不是
{["2016-03-13"]=>19, ["2016-03-14"]=>1}
试试这个:
@results.map{|x| x.start_time.strftime('%F')}.reduce(Hash.new(0)) { |a, b| a[b] += 1; a }
<强>更新强>:
使用新信息,此代码应该完成这项工作:
@results.group_by{|x| x.start_time.strftime('%F')}.map{|k,v| [[k], [v.size]] }
它将返回类似
的内容[
[["2016-03-13"], [19]],
[["2016-03-14"], [1]]
]