#ruby #arrays
#ruby #массивы
Вопрос:
У меня есть массив закладных объектов
class Mortgage
attr_accessor :rate, :deposit
def initialize(deposit, rate)
@deposit = deposit
@rate = rate
end
end
Я хотел бы отклонить любую ипотеку, которая имеет более высокую ставку, чем другая ипотека с тем же депозитом.
Например, представьте следующий массив закладных
Mortgage 1, :rate => 3, :deposit => 20
Mortgage 2, :rate => 5, :deposit => 20
Mortgage 3, :rate => 7, :deposit => 30
Метод должен отклонить закладную 2.
Комментарии:
1. следует ли сохранить исходный порядок или нет?
Ответ №1:
mortgages = [
Mortgage.new(20, 3),
Mortgage.new(20, 5),
Mortgage.new(30, 7)
]
mortgages.group_by(amp;:deposit).map { |deposit, mortgages| mortgages.min_by(amp;:rate) }
group_by
создает хэш на основе данного метода, поэтому в этом случае он дает:
{
20 => [
#<Mortgage:0x24 @rate=3 @deposit=20>,
#<Mortgage:0x2c @rate=5 @deposit=20>
],
30 => [
#<Mortgage:0x38 @rate=7 @deposit=30>
]
}
Тогда достаточно просто просто взять ипотеку с минимальной ставкой с каждого депозита.