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

时间:2016-09-19 20:16:48

标签: arrays ruby hash

我有一个由几个哈希组成的数组。我想找到特定键/值的最高值,并打印该哈希的名称值。例如,我有一个"学生"包含每个学生信息的哈希数组。我想找出哪个学生的考试成绩最高并打印出他们的名字。对于下面的阵列," 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"
    }
]

2 个答案:

答案 0 :(得分:13)

您可以使用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 :(得分: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" }
           ]

确定a * @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的父亲是James ("Big Jim") Hogg,1891年到1895年的德克萨斯州州长.Ima有一个名叫“Ura”的妹妹(我认为这是事实)原来是城市传奇。