我有一个哈希,我已经使用值
对其进行了排序@friends_comment_count.sort_by{|k,v| -v}
现在我只想获得前五个元素的哈希值。一种方法是使用一个计数器并在其5时断开。 什么是红宝石的首选方式?
由于
答案 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]