2013-11-01 4 views
0

я получил элементы массива, содержащие Юниксовое время для твитов прошлой неделиГруппировка элементов массива на основе диапазона и сосчитать

times = [1383285836, 1383285835, 1383285827, 1383285819, 1383285819, 1383285818, 1383285814, 1383285808, 1383285806, 1383285802, 1383285793, 1383285787, 1383285781, 1383285781, 1383285781, 1383285779, 1383285778, 1383285756, 1383285756, 1383285755, 1383285755, 1383285753, 1383285752, 1383285752, 1383285746, 1383285739, 1383285735, 1383285735, 1383285729, 1383285721, 1383285717, 1383285715, 1383285715, 1383285712, 1383285710, 1383285708, 1383285706, 1383285702, 1383285694, 1383285690, 1383285690, 1383285689, 1383285689, 1383285684, 1383285684, 1383285682, 1383285681, 1383285681, 1383285681, 1383285680, 1383285670, 1383285670, 1383285663, 1383285659, 1383285659, 1383285658, 1383285656, 1383285653, 1383285650, 1383285648, 1383285647, 1383285647, 1383285644, 1383285641, 1383285639, 1383285636, 1383285633, 1383285632, 1383285627, 1383285625, 1383285623, 1383285622, 1383285620, 1383285620, 1383285619, 1383285618, 1383285616, 1383285612, 1383285612, 1383285607, 1383285607, 1383285607, 1383285603, 1383285602, 1383285599, 1383285594, 1383285590, 1383285588, 1383285586, 1383285574, 1383285572, 1383285572, 1383285568, 1383285568, 1383285567, 1383285562, 1383285560, 1383285559, 1383285557, 1383285556] 

Я хочу сгруппировать их по дальности и их количества, так я получаю от того, как много твитов в день

grouped = {date1: 3, date2: 1, date3: 5} 

Спасибо!

+1

Непонятно, что значения '1,3,5' –

+0

Мохамед, вы намеревались поставить галочку с неправильным ответом? –

ответ

0

Вы можете попробовать это также

times.group_by{|x| x }.values.map{|y| y.count} 
+0

Вам нужно преобразовать секунды в даты перед группировкой. –

1

Вы можете преобразовать время Unix на сегодняшний день, а затем использовать each_with_object в группе и рассчитывать:

times.each_with_object(Hash.new(0)){|i,h| h[Time.at(i).to_date] += 1} 
#=> {date1: 3, date2: 1, date3: 5} 

Вы также можете сделать:

Hash[times.group_by{|i| Time.at(i).to_date }.map{|k,v| [k,v.size]}] 
#=> {date1: 3, date2: 1, date3: 5} 
+0

Удивительный! Итак, я могу сделать .count для каждого права? –

+0

@Mohammed, вы можете отобразить результат, заменив каждое значение хэш-символа 'v' на' v.size'. –

+0

Я получил это: {Fri, 01 Nov 2013 => [1383283248], чт, 31 окт 2013 => [1383275391, 1383274659, 1383266019] –

Смежные вопросы