2011-01-28 6 views
1

У меня есть массив дат, например.Ruby count объектов по дате

Fri Jan 28 10:13:19 UTC 2011 
Thu Jan 27 16:57:59 UTC 2011 
Thu Jan 27 16:41:21 UTC 2011 
Wed Jan 26 09:20:48 UTC 2011 
Mon Jan 24 16:19:48 UTC 2011 
Fri Jan 21 11:45:34 UTC 2011 
Fri Jan 21 11:42:19 UTC 2011 

Как я могу сгруппировать их так выход в виде хэша с графом элементов каждый день:

Friday 28 => 1 
Thursday 27 => 2 
Wednesday 26 => 1 
Monday 24 => 1 
Friday 21 => 2 
+0

Вы хотите сгруппировать их по дням специально или по метке, как указано выше, ваш хэш-выход? – Jimmy

+0

День специально, спасибо – Tom

ответ

1

Или, решение Карого в более пространен и с помощью STRFTIME Джимми:

histogram = dates.inject(Hash.new(0)) do |hist, date| 
    hist[date.strftime('%A %d')] += 1 
    hist 
end.sort_by{|date, count| date.split(' ').last}.reverse 

дает нам:

Friday 28: 1 
Thursday 27: 2 
Wednesday 26: 1 
Monday 24: 1 
Friday 21: 2 

OK?

1
@things.group_by {|thing| thing.strftime "%A %d" }.each do |key, group| 
    puts "#{key} => #{group.size}" 
end 

%A полное название дня недели и %d это день месяца

Не могу проверить это в настоящее время, но я думаю он будет работать.

1
s=a.inject(Hash.new(0)) do |h,y| 
    z=y.split 
    h[ z[0]+z[2] ]+=1 
    h 
end 
Смежные вопросы