我有一个散列,我已经用它的值排序
@friends_comment_count.sort_by{|k,v| -v}
现在我只想得到前五个元素的哈希值。一种方法是使用计数器,当它是5时中断。在ruby中做什么更好?谢谢
s71maibg1#
h = { 'a' => 10, 'b' => 20, 'c' => 30 } # get the first two p Hash[*h.sort_by { |k,v| -v }[0..1].flatten]
已编辑:
# get the first two (more concisely) p Hash[h.sort_by { |k,v| -v }[0..1]]
5us2dqdw2#
你这样做:
h = {"test"=>"1", "test2"=>"2", "test3"=>"3"}
如果你想要第一个2:
p h.first(2).to_h
测试结果:
=> {"test"=>"1", "test2"=>"2"}
k2fxgqgv3#
新的Ruby我自己(请善待如果我错了家伙!)但这起作用吗?
@friends_comment_count.sort_by{|k,v| -v}.first 5
如果我能正确理解你的目标,
kq0g1dla4#
你不能对Hash进行排序,这就是为什么sort_by不能对你的Hash进行排序。它返回一个已排序的数组的数组。
sort_by
jbose2ul5#
在Ruby 2.2.0及更高版本中,Enumerable#max_by接受一个可选的整数参数,使其返回一个数组而不仅仅是一个元素。这意味着您可以:
Enumerable#max_by
h = { 'a' => 10, 'b' => 20, 'c' => 30 } n = 2 p h.max_by(n, &:last).to_h # => {"b"=>20, "c"=>30}
ojsjcaue6#
哈希本身并不是有序的(即使在Ruby实现中也是如此)。尝试将Hash转换为Array并从中获得[0,4]
6条答案
按热度按时间s71maibg1#
已编辑:
5us2dqdw2#
你这样做:
如果你想要第一个2:
测试结果:
k2fxgqgv3#
新的Ruby我自己(请善待如果我错了家伙!)但这起作用吗?
如果我能正确理解你的目标,
kq0g1dla4#
你不能对Hash进行排序,这就是为什么
sort_by
不能对你的Hash进行排序。它返回一个已排序的数组的数组。jbose2ul5#
在Ruby 2.2.0及更高版本中,
Enumerable#max_by
接受一个可选的整数参数,使其返回一个数组而不仅仅是一个元素。这意味着您可以:ojsjcaue6#
哈希本身并不是有序的(即使在Ruby实现中也是如此)。尝试将Hash转换为Array并从中获得[0,4]