如何在Ruby中获得哈希的最大100个值?

如何在Ruby中获得哈希的最大100个值?,ruby,Ruby,我的任务是返回Ruby中哈希的前100个值。我希望避免使用.sort\u by,因为对于大型集合来说,这会很慢,而且更希望先获取前100个哈希值,然后进行排序。您将如何处理此问题?假设我们有以下包含10000个键和随机生成的值的散列: N = 10_000 M = 25_000 h = N.times.with_object({}) { |i,h| h[i] = rand(M) } #=> { 0=>23644, 1=>5008, 2=>22792, 3=>3

我的任务是返回Ruby中哈希的前100个值。我希望避免使用
.sort\u by
,因为对于大型集合来说,这会很慢,而且更希望先获取前100个哈希值,然后进行排序。您将如何处理此问题?

假设我们有以下包含10000个键和随机生成的值的散列:

N = 10_000
M = 25_000

h = N.times.with_object({}) { |i,h| h[i] = rand(M) }
  #=> { 0=>23644, 1=>5008, 2=>22792, 3=>3700, 4=>6828,
  #     ...
  #     9995=>2240, 9996=>7923, 9997=>23223, 9998=>11945, 9999=>17913 }    
h
的最大100个值如下所示:

h.values.max(100)
  #=> [24999, 24998, 24997, 24996, 24995, 24991, 24985, 24985, 24983, 24977,
  #    24975, 24972, 24972, 24969, 24969, 24963, 24963, 24958, 24958, 24956,
  #    ...
  #    24801, 24799, 24798, 24798, 24795, 24794, 24785, 24782, 24778, 24778]

见(第三种形式)

假设我们有以下包含10000个键和随机生成的值的散列:

N = 10_000
M = 25_000

h = N.times.with_object({}) { |i,h| h[i] = rand(M) }
  #=> { 0=>23644, 1=>5008, 2=>22792, 3=>3700, 4=>6828,
  #     ...
  #     9995=>2240, 9996=>7923, 9997=>23223, 9998=>11945, 9999=>17913 }    
h
的最大100个值如下所示:

h.values.max(100)
  #=> [24999, 24998, 24997, 24996, 24995, 24991, 24985, 24985, 24983, 24977,
  #    24975, 24972, 24972, 24969, 24969, 24963, 24963, 24958, 24958, 24956,
  #    ...
  #    24801, 24799, 24798, 24798, 24795, 24794, 24785, 24782, 24778, 24778]

见(第三种形式)

一,。让它发挥作用。2.纠正/清洁/执行。你能展示一下第一步吗?忘了提0。编写测试
hash.max_by(100){| k,v | v}
1。让它发挥作用。2.纠正/清洁/执行。你能展示一下第一步吗?忘了提0。写测试
hash.max_by(100){k,v}