[英]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.