2016-09-19 68 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