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将清除阵列上的额外左侧.