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

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

Лекция 2: Введение в язык Ruby. Методы для работы с массивами

Для каждой задачи свой метод (хотя вполне хватило бы одного - each):

Метод sort

puts [4,3,2,1].sort

a = [1,4,3,2,1]
puts a
b = a.sort # создать новый отсортированный массив
puts b

a = [1,4,3,2,1]
a.sort! # сортировка массива на месте
puts a

Метод uniq

a = [1,3,2,1,3,3,4,5,1]
puts a.uniq # удалить дубликаты, сохранив порядок

a = [1,3,2,1,3,3,4,5,1]
a.uniq! # удалить дубликаты, изменив сам массив на месте
puts a

Метод inject

[1,2,3,4,5].inject{|a,b| a + b}

puts ["a", "b", "c"].inject{|a,b| a + b}

[1,2,3,4,5].inject{|a,b| a * b}

class Array
  def sum
    self.inject{|a,b| a+b}
  end
  def product
    self.inject{|a,b| a*b}
  end
end

Вычисление частот слов

# С-style (так писать не нужно)
f = {}
words.each do |word|
  if !f[word]
    f[word] = 0
  end
  f[word] += 1
end
f.each do |word, freq|
  puts "#{word}: #{freq}"
end

# Ruby Style

freqs = words.inject(Hash.new(0)) do |f,word|
  f[word] += 1
  f
end
freqs.each do |word, freq|
  puts "#{word}: #{freq}"
end

# Читаем содержимое файла и считываем из него слова (последовательности букв, удовлетворяющие
# регулярному выражению /[\w\dА-Яа-я]+/)
freqs = IO.read("a.txt").
  scan(/[\w\dА-Яа-я]+/).
  inject(Hash.new(0)) do |f,word|
    f[word] += 1
    f
end
freqs.each do |word, freq|
  puts "#{word}: #{freq}"
end

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