2016-09-19 7 views
4

私はいくつかのハッシュで作られた配列を持っています。私は、特定のキー/値の最高値を探し、そのハッシュの名前の値を表示したいと思います。例えば、私は各学生に情報を含むハッシュの "学生"配列を持っています。私はどの生徒が最高のテスト得点を出しているかを見出し、その名前を印刷したいと思います。以下の配列については、 "Kate Saunders"が最高のテスト得点を記録していますので、私は彼女の名前を印刷したいと思います。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

あなたは@Bartek ALA、最も高いスコアを決定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" } 
      ] 

を使用することができます。

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 

いまの父は、いまは(私は事実だと思った)「裏」という名前の姉妹は都市伝説であることが判明したことが1891年と1895年の間James ("Big Jim") Hogg、テキサス州の知事でした。

+0

ありがとうCary!上記のあなたのコメントを見ました。ごめんなさい!スタックオーバーフローを使用する方法の習慣をまだ学んでいます。だから、最初の答え、つまり初心者の間違いで飛びました。あなたのソリューションに感謝します。それは良い選択肢であり、仕事を完了させる! – AliZ

関連する問題