Как найти ключ хеша наибольшего значения? - PullRequest
99 голосов
/ 18 мая 2011

У меня есть следующий хэш {"CA"=>2, "MI"=>1, "NY"=>1}

Как я могу вернуть пару максимального значения ключа, используя ruby?Я хотел бы вернуть "CA"

Ответы [ 7 ]

211 голосов
/ 18 мая 2011

Это вернет макс хэш-пару ключ-значение в зависимости от значения хеш-элементов:

def largest_hash_key(hash)
  hash.max_by{|k,v| v}
end
34 голосов
/ 26 июля 2015

Я нашел этот способ, вернуть ключ первого максимального значения

hash.key(hash.values.max)
17 голосов
/ 26 июня 2013

Другой способ может быть следующим:

hash.each { |k, v| puts k if v == hash.values.max }

Это проходит через каждую пару ключ-значение и возвращает (или в этом случае помещает в) ключ (и), где значение равно максимуму всех значений. Это должно вернуть более одного ключа, если есть связь.

5 голосов
/ 22 декабря 2014

Вы можете использовать метод select, если хотите, чтобы возвращалась пара значений ключа:

hash.select {|k,v| v == hash.values.max }
3 голосов
/ 28 марта 2016

Если вы хотите получить более одной пары значений ключа на основе порядка (второй по величине, наименьший и т. Д.), Более эффективным способом будет сортировка хэша один раз и затем получение желаемых результатов.

def descend_sort(hash)
   hash = hash.sort_by {|k,v| v}.reverse
end

Ключ наибольшего значения

puts *hash[0][0]

Получите максимум и минимум

puts *hash[0], *hash[hash.length-1]

2-я самая большая пара значений ключа

Hash[*hash[1]]

Чтобы преобразовать массив хэшей обратно в хэш

hash.to_h
1 голос
/ 10 июля 2017

Я сделал это сегодня с похожей проблемой и в итоге получил:

hash = { "CA"=>2, "MI"=>1, "NY"=>1 }

hash.invert.max&.last
=> "CA" 

Для Ruby менее 2.3 вы можете заменить &.last на .try(:last) Любой из них - просто гарантия, если ваш исходный хеш пуст: {}

0 голосов
/ 18 мая 2011

Это вернет последний ключ хэша, отсортированный по размеру;однако могут быть два ключа с одинаковым значением.

def largest_hash_key(hash)
  key = hash.sort{|a,b| a[1] <=> b[1]}.last
  puts key
end

hash = { "n" => 100, "m" => 100, "y" => 300, "d" => 200, "a" => 0 }
largest_hash_key(hash)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...