grades = [
{:student=>"James", :age=>19, :score=>85},
{:student=>"Kate", :age=>19, :score=>92},
{:student=>"Sara", :age=>20, :score=>74},
{:student=>"Riley", :age=>20, :score=>85},
{:student=>"patrick", :age=>20, :score=>96},
{:student=>"luke", :age=>21, :score=>88},
{:student=>"susie", :age=>21, :score=>90}
]
我试图让得分最高的学生是20岁,但只能按所有学生的最高得分进行排序。有谁知道如何将max_by限制为上述哈希中只有20岁的学生?
答案 0 :(得分:4)
找到最高分
grades.select { |person| person[:age] == 20 }.max_by { |person| person[:score] }
答案 1 :(得分:1)
我的目标是通过哈希一次。
最初,我发布了以下内容,但它是不正确的,因为如果没有20岁的学生,它会返回不为20的学生的姓名。
grades.max { |h| h[:age] == 20 ? h[:score] :
-Float::INFINITY }[:student]
这是我的修改后答案:
def best20(grades)
student = nil
highest = -Float::INFINITY
grades.each do |h|
if h[:age] == 20 && h[:score] > highest
highest = h[:score]
student = h[:student]
end
end
student
end
best20 grades
#=> "patrick"
best20 [{:student=>"James", :age=>19, :score=>85}]
#=> nil
答案 2 :(得分:0)
就像想法一样。
假设我们有几名20岁的学生,他们的最高分数相同。
在这种情况下,Cary和Ursus的变体只返回第一人称。
因此,我想到了这样的想法
AppBarLayout
不要严格判断,这只是一个主意。