Как разобрать текстовый файл и подсчитать появление строки?

У меня есть текстовый файл со списком дат

2014-01-18
2014-01-18
2014-01-20
2014-01-20
2014-01-20
2014-01-21
2014-01-21
2014-01-22
2014-01-22
2014-01-22
2014-01-22
2014-01-22

Как я могу подсчитать, сколько раз записывается каждая дата? Итак, выведите что-то похожее на:

2014-01-18 2
2014-01-19 0
2014-01-20 3
2014-01-21 2
2014-01-22 5

person grabury    schedule 08.04.2014    source источник
comment
Если вам просто нужен вывод: sort textfile | uniq -c   -  person Stefan    schedule 08.04.2014
comment
возможный дубликат количества повторяющихся элементов в массиве ruby   -  person Uri Agassi    schedule 08.04.2014
comment
Я согласен с @Stefan в том, что использование простой командной строки оболочки - лучший способ. Это быстро и легко.   -  person the Tin Man    schedule 08.04.2014


Ответы (2)


Мне нравится использовать Hash.new

lines = ["2014-01-18", "2014-01-18", "2014-01-20", 
         "2014-01-20", "2014-01-20", "2014-01-21", 
         "2014-01-21", "2014-01-22", "2014-01-22", 
         "2014-01-22", "2014-01-22", "2014-01-22"]

result = Hash.new(0)
lines.each { |line| result[line] += 1 }

result
# => {"2014-01-18"=>2, "2014-01-20"=>3, "2014-01-21"=>2, "2014-01-22"=>5}
person xlembouras    schedule 08.04.2014
comment
Вам не нужно проходить блок, просто result = Hash.new(0) - person Stefan; 08.04.2014
comment
И, более короткая версия, так как я однострочный парень: lines.each_with_object(Hash.new(0)) { |l, h| h[l] += 1 } - person mdesantis; 08.04.2014
comment
@Стефан, ты прав, я обычно использую более подробный блок. Я отредактировал ответ. - person xlembouras; 08.04.2014

person    schedule
comment
Hash.[] старомоден. - person sawa; 08.04.2014
comment
Мне это тоже не нравится, но альтернатив я не знаю; Что бы вы использовали? - person mdesantis; 08.04.2014
comment
Почему бы не использовать Array#to_h? - person sawa; 08.04.2014
comment
Как мне превратить строки текстового файла в массив? - person grabury; 08.04.2014
comment
@sawa О! Я этого не знал, кажется, это было введено в Ruby 2.1.0, спасибо за информацию! spuggy, я напишу, какую версию Ruby вы используете? - person mdesantis; 08.04.2014
comment
@spuggy Если вы используете устаревшую версию Ruby, вы должны указать это в вопросе, добавив соответствующий тег. - person sawa; 08.04.2014