Конвертировать коллекцию в Ruby - PullRequest
0 голосов
/ 16 декабря 2010

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

У меня есть коллекция ПробегRecords (Дата, Одометр, Галлоны) и хотел бы создать список FooObject (Мили, 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

Ответы [ 2 ]

4 голосов
/ 16 декабря 2010

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

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)
1 голос
/ 16 декабря 2010

Как насчет:

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
...