我有一组数据:
grade_hash = {bill: [100, 95, 92], frank: [67, 73, 84], sue: [99, 88, 77], karen: [70,80,90], bob: [95, 93, 92]}
我也有一个年级:
def letter_grade(score)
if score >= 90
"A"
elsif score >= 80
"B"
elsif score >= 70
"C"
elsif score >= 60
"D"
else
"F"
end
end
我想提取那些成绩最高的两个。
我有:
def top_students(grade_hash, number_of_students)
grade_hash.transform_values {|nums| letter_grade(nums.reduce(:+)/nums.size)}
end
这将给出每个学生的平均成绩并应用字母等级。如何提取前两名?
我尝试应用.sort_by,但这不起作用。
答案 0 :(得分:0)
要进行排序,您需要转换为数组。哈希不可分类。
adview.getLayoutParams().height = 0;
以上将对值进行排序。
从那里你可以选择前grade_hash
.transform_values {|nums| letter_grade(nums.reduce(:+)/nums.size)}
.to_a
.sort_by(&:last)
名学生,如果你想保留这种格式,也可以选择转换回哈希。
n
附录:CarySwoveland指出ruby 2.4中的数组支持grade_hash
.transform_values {|nums| letter_grade(nums.reduce(:+)/nums.size)}
.to_a # this is superfluous; .sort_by on a hash will do this internally
.sort_by(&:last)
.take(number_of_students)
.to_h
所以减少是不必要的
sum