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
Respostas:
Isso retornará o par de valor-chave hash máximo, dependendo do valor dos elementos hash:
fonte
Eu encontrei assim, retorna a chave do primeiro valor máximo
fonte
Outra forma poderia ser a seguinte:
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.
fonte
Você pode usar o método de seleção se quiser que o par de valores-chave seja retornado:
fonte
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.
Chave de maior valor
Obtenha máximo e mínimo
2º maior par de valores-chave
Para converter a matriz hash de volta em um hash
fonte
Eu fiz isso hoje com um problema semelhante e acabei com o seguinte:
Para Ruby inferior a 2,3, você pode substituir
&.last
por.try(:last)
Qualquer um é apenas uma proteção caso o hash de origem esteja vazio:{}
fonte
Isso retornará a última chave do hash classificado por tamanho; no entanto, pode haver duas chaves com o mesmo valor.
fonte