Respostas:
Isso retornará o par de valor-chave hash máximo, dependendo do valor dos elementos hash:
def largest_hash_key(hash)
hash.max_by{|k,v| v}
end
Eu encontrei assim, retorna a chave do primeiro valor máximo
hash.key(hash.values.max)
Outra forma poderia ser a seguinte:
hash.each { |k, v| puts k if v == hash.values.max }
Isso percorre cada par de valor-chave e retorna (ou, neste caso, puts) a (s) chave (s) onde o valor é igual ao máximo de todos os valores. Isso deve retornar mais de uma chave se houver um empate.
Se você deseja recuperar mais de um par de valores-chave com base na ordem (segundo maior, menor etc.), uma maneira mais eficiente será classificar o hash uma vez e obter os resultados desejados.
def descend_sort(hash)
hash = hash.sort_by {|k,v| v}.reverse
end
Chave de maior valor
puts *hash[0][0]
Obtenha máximo e mínimo
puts *hash[0], *hash[hash.length-1]
2º maior par de valores-chave
Hash[*hash[1]]
Para converter a matriz hash de volta em um hash
hash.to_h
Isso retornará a última chave do hash classificado por tamanho; no entanto, pode haver duas chaves com o mesmo valor.
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)