我有一个哈希表,我已经按照值对它进行了排序
@friends_comment_count.sort_by{|k,v| -v}
现在我只想获取前五个元素的哈希值...一种方法是使用计数器,当其为5时中断。 在Ruby中有更好的方法吗?
谢谢
我有一个哈希表,我已经按照值对它进行了排序
@friends_comment_count.sort_by{|k,v| -v}
现在我只想获取前五个元素的哈希值...一种方法是使用计数器,当其为5时中断。 在Ruby中有更好的方法吗?
谢谢
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]]
h = {"test"=>"1", "test2"=>"2", "test3"=>"3"}
p h.first(2).to_h
结果:
=> {"test"=>"1", "test2"=>"2"}
我自己对Ruby也是新手(如果我错了,请不要太苛刻!)但这样行得通吗?
@friends_comment_count.sort_by{|k,v| -v}.first 5
如果我正确理解您想实现的内容,在IRB中可以正常工作。
[[:a,1],[:b,2]]
。哈希被转换为一个数组,然后在该数组上使用了 first
方法。 - Kassym DorselHash[]
中来将那个数组转换回哈希表,如下所示:Hash[@friends_comment_count.sort_by{|k,v| -v}.first 5]
。 - mu is too shortsort_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}
哈希表本质上是无序的(尽管在 Ruby 实现中它们是有序的)。尝试将你的哈希表转换为数组,然后从中获取 [0,4]。
sort_by
返回一个数组。 - Oleg Mikheev
flatten
,只需将 AoA 传递给Hash[]
:Hash[h.sort_by { |k,v| -v }[0..1]]
。 - mu is too shortp h.sort_by { |k,v| -v }[0..1].to_h
- Jussi Hirvi