我的问题是我是否可以使用范围作为哈希中键:值对中的值。我正在研究一个问题,我试图返回一个字母等级(A-F)的平均数字等级(数组)。我有一个有效的解决方案,但我遇到了一些有趣的东西。这是我的代码:
def get_grade(array)
avg = (array.inject {|num, x| num + x}) / array.length
grades = {
"A" => [90..10]
"B" => [80..89],
"C" => [70..79],
"D" => [60..69],
"F" => [0..59],
}
grades.default = "Error"
puts grades.key(avg)
end
arraya = [100,90,100,99,99]
puts get_grade(arraya)
我知道我可以用case或if语句返回字母等级。看起来我应该能够使用哈希,但它不起作用。为什么我不能设置范围为值的哈希?感谢。
答案 0 :(得分:3)
您可以使用案例陈述:
def get_grade(scores)
case scores.inject(&:+) / scores.length
when 90..100; 'A'
when 80..89; 'B'
when 70..79; 'C'
when 60..69; 'D'
when 0..59; 'F'
else; 'Error'
end
end
arraya = [100,90,100,99,99]
puts get_grade(arraya)
#=> A
答案 1 :(得分:2)
您可能希望重写您的方法,如下所示:
def get_grade(array)
avg = array.inject(:+) / array.length
grades = {
"A" => (90..100),
"B" => (80..89),
"C" => (70..79),
"D" => (60..69),
"F" => (0..59),
}
grade = grades.find{|key, range| range.include?(avg) }
grade.nil? ? "Unknown" : grade.first
end
arraya = [100,90,100,99,99]
puts get_grade(arraya) # => A