2016-09-19 66 views
4

我有一个由多个哈希组成的数组。我想找到特定键/值的最高值并打印该散列的名称值。例如,我有一个包含每个学生信息的“学生”哈希数组。我想找到哪个学生获得了最高的考试分数并列出他们的名字。对于下面的阵列,“凯特桑德斯”具有最高的测试分数,所以我想打印出她的名字。在Ruby中查找哈希数组中的最大值

任何帮助或指针都将在此开始将不胜感激。我现在有一件诡计多端的工作,但我知道还有更好的办法。我对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" 
    } 
] 
+0

1.您到目前为止尝试过什么? 2.你现在有什么样的方法?添加相同的代码。 – acsrujan

+0

我的诡计就是将测试成绩推送到一个单独的数组中,并获得最高的索引并将其与学生数组中的哈希索引进行比较。这很丑陋。 – AliZ

回答

7

您可以使用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" 
1
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" } 
      ] 

确定最高得分阿拉@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 

伊玛的父亲是James ("Big Jim") Hogg,得克萨斯州州长1891年和1895年那伊玛有一个名为“里”妹妹(我认为是事实)原来是都市传说之间。

+0

谢谢卡里!刚刚在上面看到您的评论。抱歉!还在学习如何使用Stack Overflow的礼仪。所以,我跳到了第一个有效的答案 - 初学者的错误。感谢您的解决方案。这是一个很好的选择,并完成工作! – AliZ