在Ruby中查找哈希数组中的最高值

15
我有一个由多个哈希组成的数组。我想要查找特定键/值的最高值,并打印该哈希表中该名称对应的值。例如,我有一个“学生”哈希数组,包含每个学生的信息。我想查找哪个学生的考试成绩最高,并输出他们的名字。对于下面的数组,“Kate Saunders”的考试成绩最高,因此我想打印出她的名字。
任何帮助或指针都将不胜感激。我现在有一个hacky解决方法,但我知道有更好的方法。我是Ruby的新手,爱它,但在这个问题上被卡住了。非常感谢!
students = [
    {
        name: "Mary Jones",
        test_score: 80,
        sport: "soccer"
    },
    {
        name: "Bob Kelly",
        test_score: 95,
        sport: "basketball"
    }.
    {
        name: "Kate Saunders",
        test_score: 99,
        sport: "hockey"
    },
    {
        name: "Pete Dunst",
        test_score: 88,
        sport: "football"
    }
]

  1. 你目前尝试了什么?
  2. 你已经有了什么不太正规的方法?请添加相应的代码。
- acsrujan
我的笨办法是将测试分数推入一个单独的数组中,然后获取最高分的索引并将其与学生数组中的哈希索引进行比较。这很丑陋。 - AliZ
2个回答

30

你可以使用max_by方法

students = [ { name: "Mary Jones", test_score: 80, sport: "soccer" }, { name: "Bob Kelly", test_score: 95, sport: "basketball" }, { name: "Kate Saunders", test_score: 99, sport: "hockey" }, { name: "Pete Dunst", test_score: 88, sport: "football" } ]

students.max_by{|k| k[:test_score] }
#=> {:name=>"Kate Saunders", :test_score=>99, :sport=>"hockey"}

students.max_by{|k| k[:test_score] }[:name]
#=> "Kate Saunders"

4
students = [ { name: "Mary Jones", test_score: 80, sport: "soccer" },
             { name: "Bob Kelly", test_score: 95, sport: "basketball" },
             { name: "Kate Saunders", test_score: 99, sport: "hockey" },
             { name: "Pete Dunst", test_score: 88, sport: "football" },
             { name: "Ima Hogg", test_score: 99, sport: "darts" }
           ]

确定最高分,ala @Bartek。
max_score = students.max_by { |h| h[:test_score] }[:test_score]
  #=> 99 

然后确定哪个学生获得了那个分数。

star_students = students.select { |h| h[:test_score] == max_score }.
                         map { |h| h[:name] }
  #=> ["Kate Saunders", "Ima Hogg"] 

puts star_students
  # Kate Saunders
  # Ima Hogg

Ima的父亲是詹姆斯(“大吉姆”)霍格, 他在1891年至1895年间担任得克萨斯州州长。而有一个名叫“乌拉”的姐妹(我曾认为这是事实),结果被证明是都市传说。


谢谢Cary!刚看到你上面的评论。抱歉!我还在学习如何使用Stack Overflow的礼仪。所以,我选择了第一个可行的答案——初学者的错误。感谢您的解决方案。这是一个不错的替代方案,可以完成工作! - AliZ

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接