我有一个哈希示例,它在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
我有一个问题是分别总结每个元素。它估计第一个元素并继续。你能帮我解决这个问题。
答案 0 :(得分: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
答案 1 :(得分:0)
您应该在循环开头设置为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
答案 2 :(得分:0)
这是另一种方法:
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。