[英]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#fdiv
和Float#round
。 有關更多信息,請參見ruby-doc.org 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.