簡體   English   中英

在哈希中匯總多個數組值-Ruby

[英]To sum up more than one array values in hash - Ruby

我有一個哈希示例,在Ruby中有兩個元素(section_one和section_two)。 我想分別總結每個元素,並估計每個元素的平均值。

我的哈希:

class_grades = {
  :section_one => [88, 74, 64],
  :section_two => [99, 100]
}

我已經嘗試過此代碼

sum = 0
class_grades.each do |key, value|
  value.each do |value1|
    sum += value1
  end
    puts "#{key}: #{sum.to_f}"
end

但結果是:

section_one: 226.0
section_two: 425.0

我有一個問題要分別總結每個元素。 它估計冷杉元素並繼續。 您能幫我解決這個問題嗎?

首先,以最少的代碼編輯:

class_grades.each do |key, value|
  sum = 0
  value.each do |value1|
    sum += value1
  end
    puts "#{key}: #{sum.to_f}"
end

但我建議您采取以下措施:

class_grades.each do |key, value|
  puts "#{key}: #{value.inject(:+).to_f}"
end

您應在循環開始時將sum設置為零

class_grades.each do |key, value|
  sum = 0
  value.each do |value1|
    sum += value1
  end
  puts "#{key}: #{sum.to_f}"
end

有一種更慣用的方法來從可枚舉中獲取總和

class_grades.each do |key, value|
  sum = value.inject(0, :+)
  puts "#{key}: #{sum.to_f}"
end

而且,您不需要.to_f 1 + 2.5獲得3.5

class_grades.each do |key, value|
  sum = value.inject(0, :+)
  puts "#{key}: #{sum}"
end

這是執行此操作的另一種方法:

class_grades.map { |k,v| [k, v.sum.fdiv(v.size).round(1)] }.to_h
 #=> { :section_one => 75.3, :section_two => 99.5 }

關鍵方法: Array#sum (> 2.4.0), Integer#fdivFloat#round 有關更多信息,請參見ruby-doc.org

暫無
暫無

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

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