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

cygmwpex  于 2023-10-17  发布在  Ruby
关注(0)|答案(6)|浏览(167)

我有一个散列,我已经用它的值排序

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

现在我只想得到前五个元素的哈希值。一种方法是使用计数器,当它是5时中断。在ruby中做什么更好?
谢谢

s71maibg

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]]
5us2dqdw

5us2dqdw2#

你这样做:

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

如果你想要第一个2:

p h.first(2).to_h

测试结果:

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

k2fxgqgv3#

新的Ruby我自己(请善待如果我错了家伙!)但这起作用吗?

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

如果我能正确理解你的目标,

kq0g1dla

kq0g1dla4#

你不能对Hash进行排序,这就是为什么sort_by不能对你的Hash进行排序。它返回一个已排序的数组的数组。

jbose2ul

jbose2ul5#

在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}
ojsjcaue

ojsjcaue6#

哈希本身并不是有序的(即使在Ruby实现中也是如此)。尝试将Hash转换为Array并从中获得[0,4]

相关问题