Как найти ключ наибольшего значения хэш?

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

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

Ответ 1

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

def largest_hash_key(hash)
  hash.max_by{|k,v| v}
end

Ответ 2

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

a.key(a.values.max)

Ответ 3

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

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

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

Ответ 4

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

hash.select {|k,v| v == hash.values.max }

Ответ 5

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

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

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

puts *hash[0][0]

Получить максимальный и минимальный

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

Вторая по величине пара значений ключа

Hash[*hash[1]]

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

hash.to_h

Ответ 6

Я сделал это сегодня по аналогичной проблеме и закончил с этим:

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

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

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

Ответ 7

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

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)