从ruby哈希值数组中获取前n个元素

Emm*_*l P 9 ruby arrays sorting

嘿我有一个数组,其中每个元素都是一个包含几个值和一个计数的哈希.

result = [
           {"count" => 3,"name" => "user1"}, 
           {"count" => 10,"name" => "user2"}, 
           {"count" => 10, "user3"},
           {"count" => 2, "user4"}
         ]
Run Code Online (Sandbox Code Playgroud)

我可以按如下方式对数组进行排序:

result = result.sort_by do |r|
  r["count"]
end
Run Code Online (Sandbox Code Playgroud)

现在我希望能够根据计数检索前n个条目(不仅仅是第一个(n))是否有一种优雅的方式来做到这一点?所以作为一个例子,让n = 1我期望得到一个结果集.

[{"count" => 10,"name" => "user2"}, {"count" => 10, "user3"}]
Run Code Online (Sandbox Code Playgroud)

因为我要求得分最高的所有参赛作品..如果我要求获得前2名最高分

 [{"count" => 10,"name" => "user2"}, {"count" => 10, "user3"}, {"count" => 3, "user1"}]
Run Code Online (Sandbox Code Playgroud)

mu *_*ort 24

Enumerable#group_by 拯救(像往常一样):

result.group_by { |r| r["count"] }
      .sort_by  { |k, v| -k }
      .first(2)
      .map(&:last)
      .flatten
Run Code Online (Sandbox Code Playgroud)

大部分工作都是由group_by.在sort_by简单的线条东西,这样first(2)会摘掉你想要的组.然后map使用last将提取您开始使用的计数/名称哈希值,最后flatten将清除阵列上的额外左侧.