总结一下哈希中的多个数组值 - Ruby

时间:2016-12-29 11:56:59

标签: arrays ruby hash sum average

我有一个哈希示例,它在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

我有一个问题是分别总结每个元素。它估计第一个元素并继续。你能帮我解决这个问题。

3 个答案:

答案 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_f1 + 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#fdivFloat#round。有关详细信息,请参阅ruby-doc.org