2010-12-15 4 views
0

Как конвертировать коллекцию из одного типа в другой в Ruby.Конвертировать коллекцию в Ruby

У меня есть коллекция MileageRecords (Дата, Одометр, Галлоны) и хотелось бы сгенерировать список FooObject (Miles, MPG). Свойства FooObject вычисляются из записи пробега.

Это заставляет меня данные, но я не вижу, как создать коллекцию

LogEntry.all.each_with_index do |log, index| 
    if index > 0 
    miles = LogEntry.all[index - 1].odometer - log.odometer 
    mpg = miles/log.gallons 
    puts "#{log.date} #{miles} #{mpg}" 
    end 
end 

ответ

1

Как насчет:

fuel_economy = LogEntry.all.each_cons(2).map do |prev, curr| 
    miles = curr.odometer - prev.odometer 
    mpg = miles/curr.gallons 
    FuelEconomy.new(miles, mpg) 
end 
+0

Спасибо. Любые идеи о том, что назвать FooObject? :) – Brig 2010-12-16 16:03:49

4

Вы не можете сделать какое-либо неявный тип, особенно с вашими собственными классами. Лучший способ, вероятно, создать метод to_foo_object для MileageRecords

class MileageRecords 
    def to_foo_object 
    FooObject.new(miles, mpg) # you'll need to define these variables somehow 
    end 
end 

Тогда вы можете позвонить

mileage_records.map{|mr| mr.to_foo_object } 

или сократить его немного

mileage_records.map(&:to_foo_object) 
Смежные вопросы