如何从数组中返回前三个值

时间:2017-09-13 00:12:17

标签: ruby

我有一组数据:

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,但这不起作用。

1 个答案:

答案 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