Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 将值转换为所有值总和的百分比_Ruby_Hash - Fatal编程技术网

Ruby 将值转换为所有值总和的百分比

Ruby 将值转换为所有值总和的百分比,ruby,hash,Ruby,Hash,假设我有下面的代码。是否有代码将这些值转换为所有值总和的百分比。例如,由于所有分数之和为200,Harrison将为0.4 40% kids_points { Harrison: 80, Jack: 70, Justin: 30, Max: 20, } 这里有一个方法: kids_points = { Harrison: 80, Jack: 70, Justin: 30, Max: 20, } def calculate_average(hash = arg.dup) sum

假设我有下面的代码。是否有代码将这些值转换为所有值总和的百分比。例如,由于所有分数之和为200,Harrison将为0.4 40%

kids_points {
Harrison: 80,
Jack: 70, 
Justin: 30, 
Max: 20, 
}
这里有一个方法:

kids_points = {
Harrison: 80,
Jack: 70, 
Justin: 30, 
Max: 20, 
}

def calculate_average(hash = arg.dup)
  sum_of_values = calculate_sum(hash.values)
  hash.each { |k,v| hash[k] = (100 * v) / sum_of_values }
end

def calculate_sum(enum)
  enum.reduce(:+).to_f
end

calculate_average(kids_points) 
# => {:Harrison=>40.0, :Jack=>35.0, :Justin=>15.0, :Max=>10.0}
阅读以下内容和方法。

如果您使用active\u支持,您可以执行以下操作:

require 'active_support/all'

sum = hash.values.sum
hash.each { |k,v| hash[k] = (100.0 * v) / sum }
请注意,在大多数情况下,当百分比不是整数或者它们的总和不是100时,100.0是必需的。例如:

hash = {
  Harrison: 60,
  Jack: 60, 
  Justin: 50, 
  Max: 50
}

# With 100.0
# => {:Harrison=>27.272727272727273, :Jack=>27.272727272727273, :Justin=>22.727272727272727, :Max=>22.727272727272727}

# With 100
# => {:Harrison=>27, :Jack=>27, :Justin=>22, :Max=>22}

你必须计算它..如何计算散列中的值?