假设我有以下代码。是否有任何代码可以将值转换为所有值之和的百分比。例如,由于所有点的总和为200,Harrison将为0.4(40%)
kids_points {
Harrison: 80,
Jack: 70,
Justin: 30,
Max: 20,
}
答案 0 :(得分:0)
这是一种方式:
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}
阅读此Enumerable#reduce
和Hash#values
方法。
答案 1 :(得分:0)
如果您使用active_support
,则可以执行此操作:
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}