2010-12-15 53 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

+0

FuelEconomy或MileageEfficiency如何:-) – toolkit 2010-12-16 20:00:37

4

你不能做任何形式的隐式类型的铸造,尤其是与自己的类。最好的方法可能是创建MileageRecords一个to_foo_object方法

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)