如何在ruby中从Hash中获取前n个元素?

时间:2011-12-20 18:56:24

标签: ruby

我有一个哈希,我已经使用值

对其进行了排序
@friends_comment_count.sort_by{|k,v| -v}

现在我只想获得前五个元素的哈希值。一种方法是使用一个计数器并在其5时断开。  什么是红宝石的首选方式?

由于

6 个答案:

答案 0 :(得分:30)

h = { 'a' => 10, 'b' => 20, 'c' => 30 }

# get the first two
p Hash[*h.sort_by { |k,v| -v }[0..1].flatten]

<强> EDITED

# get the first two (more concisely)
p Hash[h.sort_by { |k,v| -v }[0..1]]

答案 1 :(得分:17)

你不能做以下事情:

h = {"test"=>"1", "test2"=>"2", "test3"=>"3"}

然后如果你想要第一个2:

p h.first(2).to_h

结果:

=> {"test"=>"1", "test2"=>"2"}

答案 2 :(得分:7)

我自己也是红宝石的新手(如果我错了,请相信!)但这有用吗?

@friends_comment_count.sort_by{|k,v| -v}.first 5

如果我理解你正在努力实现的目标,那么我在IRB工作

答案 3 :(得分:4)

你无法对哈希进行排序,这就是为什么sort_by不对你的哈希进行排序的原因。它返回一个已排序的数组数组。

答案 4 :(得分:2)

在Ruby 2.2.0及更高版本中,Enumerable#max_by采用可选的整数参数,使其返回一个数组而不是一个元素。这意味着您可以:

h = { 'a' => 10, 'b' => 20, 'c' => 30 }
n = 2
p h.max_by(n, &:last).to_h   # => {"b"=>20, "c"=>30}

答案 5 :(得分:0)

哈希本质上没有排序(甚至在Ruby实现中也是如此)。尝试将哈希转换为数组并从中获取[0,4]