Ruby 哈希组按值

Sam*_*bit 5 ruby

我有一个包含学生姓名和标记的 ruby​​ 哈希值,如下所示。

student_marks = {
    "Alex" => 50,
    "Beth" => 54,
    "Matt" => 50
}
Run Code Online (Sandbox Code Playgroud)

我正在寻找根据学生的分数对学生进行分组的解决方案。

{
    50 => ["Alex", "Matt"],
    54 => ["Beth"]
}
Run Code Online (Sandbox Code Playgroud)

我试过了,group_by但没有给我想要的结果。以下是使用的结果group_by。

student_marks.group_by {|k,v| v}
{50=>[["Alex", 50], ["Matt", 50]], 54=>[["Beth", 54]]}
Run Code Online (Sandbox Code Playgroud)

提前致谢。

Car*_*and 6

student_marks.group_by(&:last).transform_values { |v| v.map(&:first) }
  #=> {50=>["Alex", "Matt"], 54=>["Beth"]}
Run Code Online (Sandbox Code Playgroud)

Hash#transform_values在 Ruby MRI v2.4.0 中首次亮相。


spi*_*ann 5

我会做这样的事情:

student_marks.group_by { |k, v| v }.map { |k, v| [k, v.map(&:first)] }.to_h
#=> { 50 => ["Alex", "Matt"], 54 => ["Beth"]}
Run Code Online (Sandbox Code Playgroud)