簡體   English   中英

Ruby:將.each迭代的輸出求和

[英]Ruby: sum the outputs of .each iteration

我正在一個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)。 我對如何獲取這些數字並將其相加完全迷失了,特別是因為根據輸入用戶的數量,輸出的數量將有所不同。

我希望這很清楚。 有任何想法嗎?

聽起來您需要的是sum方法。 在您的情況下,您不想只遍歷所有車輛並執行一個塊,而是想對塊的結果求和並返回一個值。

 total_fuel = vehicles.sum do |vehicle|
   3000 / vehicle[:mpg]
 end

一個緊密相關且非常有用的方法是reduce ,它使您可以指定將多個值精確地減少為一個的方法。 這是一個與sum相同的示例:

# Sum some numbers
(5..10).reduce(:+)                             #=> 45

但是,由於您可以精確指定值的組合方式,因此該方法可以比sum應用於更多情況。

請查閱Enumerable模塊的文檔,以獲取適用於數組和哈希的更有用的方法。

您應該使用mapsum

total_fuel = vehicles.map { |vehicle| 3000 / vehicle[:mpg] }.sum

要么

total_fuel = vehicles.map { |vehicle| 3000 / vehicle[:mpg] }.reduce(:+)
# for Ruby version < 2.4

另一個使用Enumerable#inject的選項:

total_fuel =  = vehicles.inject(0) { |total_fuel, vehicle| total_fuel += 3000.0 / vehicle[:mpg] }

請使用3000.0而不是3000 ,這樣您將獲得浮點結果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM