繁体   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