Как получить максимум 100 значений хэша в Ruby? - PullRequest
1 голос
/ 23 сентября 2019

Мне поручено вернуть 100 лучших значений хэша в Ruby.Я хотел бы избежать использования .sort_by, потому что он будет медленным для больших наборов, и предпочел бы сначала получить 100 лучших хеш-значений, а затем отсортировать.Как бы вы подошли к этому?

1 Ответ

5 голосов
/ 23 сентября 2019

Предположим, у нас есть следующий хеш с 10 000 ключей и случайно сгенерированных значений:

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 }    

Наибольшие 100 значений h получаются следующим образом:

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]

См.(третья форма) Array # max .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...