2010-12-15 9 views
0

Comment puis-je convertir une collection d'un type à un autre en Ruby.Convertir une collection en Ruby

J'ai une collection MileageRecords (Date, Odomètre, Gallons) et j'aimerais générer une liste de FooObject (Miles, MPG). Les propriétés FooObject sont calculées à partir de l'enregistrement Kilométrage.

Cela me récupère les données, mais je ne vois pas comment créer une collection

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 

Répondre

1

Que diriez-vous:

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

Merci. Des idées sur quoi appeler le FooObject? :) – Brig

+0

Que diriez-vous de FuelEconomy ou MileageEfficiency :-) – toolkit

4

Vous ne pouvez pas faire une sorte de coulée de type implicite, en particulier avec vos propres classes. La meilleure méthode est probablement de créer une méthode to_foo_object pour MileageRecords

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

Ensuite, vous pouvez appeler

mileage_records.map{|mr| mr.to_foo_object } 

ou pour le raccourcir un peu

mileage_records.map(&:to_foo_object) 
Questions connexes