在Jumpstart Lab EventManager中排序时间

时间:2014-04-24 22:36:11

标签: ruby

在这里遇到问题。尝试过但尝试过,但遗漏了一些东西...... 试图让它打印日期列表中最受欢迎的小时。在其他地方,我在这里找到了一个解决方案,这是有道理的,但对我而言,它似乎无法正常工作。

contents = CSV.open 'event_attendees.csv', headers: true, header_converters: :symbol

contents.each do |row|
  time = [row[:regdate]]
  time_target = Hash[time.group_by { |t| DateTime.strptime(t, '%m/%d/%Y %H:%M').hour }.map{|k,v| [k, v.count]}]
  puts time_target

这会将小时和计数分成不同的行,但不会计算重复的小时数。那有意义吗?以下是我尝试此操作时的部分列表:

{10=>1}
{13=>1}
{13=>1}
{19=>1}
{11=>1}
{15=>1}
{16=>1}

我想按照"最受欢迎的"顺序排列。小时。也就是说,上面应该首先列出13 => 2(因为有两个13小时),而不是每次列出一个计数。 我为什么不重复计算重复小时数?

谢谢!

1 个答案:

答案 0 :(得分:0)

您没有将元素放入数组中。它应该是这样的

times = contents.map { |row| row[:regdate] }
grouped = times.group_by { |t| DateTime.strptime(t, '%m/%d/%Y %H:%M').hour }
time_target = Hash[grouped.map { |k, v| [k, v.count] }]