Раздел «Язык Ruby».RubyCourseLecture03:
<<Метапрограммирование на Ruby

Следующая лекция
Предыдущая лекция

Лекция 3. Задача вычисления 10 самых частых слов

Метод inject позволяет не только суммировать и умножать элементы, но и

Вычисление среднего арифметического

a = [1,2,3,4]
a.inject([0.0, 0]) {|p, elem|
  # вычисляем пару [среднее_значение, число_элементов]
  sr,count = p
  sum = sr * count + elem
  count += 1
  sr = sum / count
  [sr, count]
}

Вычисление самых частых 10 слов длины 5 символов или больше

IO.read("a.txt").scan(/[a-zA-Zа-яА-Я]+/).select{|w| w.length >= 5}.inject(Hash.new(0)){|f,word|
   f[word] += 1
   f
}.to_a.sort_by{|word,freq| -freq}[0...10].each do |word, freq|
  puts "#{word}: #{freq}"
end

Вместо scan можно использовать split

IO.read("a.txt").split(/[\s,.:?!$]+/) ....

Отбор по длине можно выполнить прямо в регулярном выражении:

IO.read("a.txt").scan(/[a-zA-Zа-яА-Я]{5,}/).inject(Hash.new(0)){|f,word|
   f[word] += 1
   f
}.to_a.sort_by{|word,freq| -freq}[0...10].each do |word, freq|
  puts "#{word}: #{freq}"
end

Задачи для самостоятельного решения:

Следующая лекция
Предыдущая лекция