我正在一个Ruby项目中制作公路旅行计算器。该程序从多个用户获取每加仑英里数和油箱尺寸,以计算和比较燃油经济性。在下面的代码部分中,我想遍历一个名为Vehicles的数组,并将3000除以该数组中每个元素的mpg。
我正在为下一步工作苦苦挣扎:获取这些输出并将它们相加(每个输出分别为3000 / total_fuel [:mpg] + 3000 / total_fuel [:mpg] + 3000 / total_fuel [:mpg] ...元件)。到目前为止,这就是我所拥有的:
vehicles.each do |total_fuel|
total_fuel = (3000 / total_fuel[:mpg])
print total_fuel
end
在打印时,它只是将计算结果彼此紧挨输出,没有空格(例如150166)。我对如何获取这些数字并将其相加完全迷失了,尤其是因为根据输入信息的用户数量,输出的数量将有所不同。
我希望这很清楚。有什么想法吗?
答案 0 :(得分:3)
听起来您需要sum方法。在您的情况下,您不想只遍历所有车辆并执行一个块,而是想对块的结果求和并返回一个值。
total_fuel = vehicles.sum do |vehicle|
3000 / vehicle[:mpg]
end
一个非常相关且非常有用的方法是reduce,它使您可以指定将多个值精确地减少为一个的方法。这是一个与sum
相同的示例:
# Sum some numbers
(5..10).reduce(:+) #=> 45
但是由于您可以精确指定值的组合方式,因此该方法可以比sum
应用于更多情况。
请查看Enumerable模块的文档,以获取适用于数组和哈希的更有用的方法。
答案 1 :(得分:0)
您应该使用map
和sum
total_fuel = vehicles.map { |vehicle| 3000 / vehicle[:mpg] }.sum
或
total_fuel = vehicles.map { |vehicle| 3000 / vehicle[:mpg] }.reduce(:+)
# for Ruby version < 2.4
答案 2 :(得分:0)
另一个使用Enumerable#inject的选项:
total_fuel = = vehicles.inject(0) { |total_fuel, vehicle| total_fuel += 3000.0 / vehicle[:mpg] }
请使用3000.0
而不是3000
,以便获得浮动结果。