Покажите мне код на Ruby
Давайте создадим класс c названием Person, с именем и возрастом. Мы протестируем наш код, создав несколько его объектов - людей, и рассмотрим их.
attr_accessor :name, :age
def initialize(name, age)
@name = name
@age = age.to_i
end
def inspect
"#@name (#@age)"
end
end
p1 = Person.new('elmo', 4)
p2 = Person.new('zoe', 7)
p1 # -> elmo (4)
p2 # -> zoe (7)
А сейчас создадим массив объектов этого класса, зачитав имена и возрасты людей из файла со следующим форматом:
bert: 8 cookie: 11 elmo: 4 ernie: 8 zoe: 7
Программа использует регулярные выражения, чтобы анализировать строки входного файла, и создает новый объект класса Person для каждого срабатывания регулярного выражения. Объект помещается в конец массива people.
File.foreach("ages") { |l|
people << Person.new($1, $2) if l =~ /(.*):s+(d+)/
}
people # -> [bert (8), cookie (11), elmo (4), ernie (8), zoe (7)]
Теперь отсортируем результаты по возрасту. Сделать это можно по-разному. Можно определить блок, который задает способ, как сравнивать два объекта класса Person(т.е. двух людей):
a.age <=> b.age
}
sorted # -> [elmo (4), zoe (7), bert (8), ernie (8), cookie (11)]
Другой способ - изменить метод сравнения в классе Person:
def <=>(other)
@age <=> other.age
end
end
people.sort # -> [elmo (4), zoe (7), bert (8), ernie (8), cookie (11)]
