Ruby 将值转换为所有值总和的百分比
假设我有下面的代码。是否有代码将这些值转换为所有值总和的百分比。例如,由于所有分数之和为200,Harrison将为0.4 40%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
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}
你必须计算它..如何计算散列中的值?