hash.each {|k, v| puts k if v == hash.values.max }
Esto se ejecuta a través de cada par clave-valor y devuelve (o en este caso, pone) la (s) clave (s) donde el valor es igual al máximo de todos los valores. Esto debería devolver más de una clave si hay un empate.
Si desea recuperar más de un par clave-valor según el orden (el segundo más grande, el más pequeño, etc.), una forma más eficiente será ordenar el hash una vez y luego obtener los resultados deseados.
Respuestas:
Esto devolverá el par clave-valor de hash máximo según el valor de los elementos hash:
fuente
Encontré de esta manera, devuelva la clave del primer valor máximo
fuente
Otra forma podría ser la siguiente:
Esto se ejecuta a través de cada par clave-valor y devuelve (o en este caso, pone) la (s) clave (s) donde el valor es igual al máximo de todos los valores. Esto debería devolver más de una clave si hay un empate.
fuente
Puede utilizar el método de selección si desea que se devuelva el par clave-valor:
fuente
Si desea recuperar más de un par clave-valor según el orden (el segundo más grande, el más pequeño, etc.), una forma más eficiente será ordenar el hash una vez y luego obtener los resultados deseados.
Clave de mayor valor
Obtener máximo y mínimo
Segundo par clave-valor más grande
Para convertir la matriz hash de nuevo en un hash
fuente
Hice esto hoy en un problema similar y terminé con esto:
Para Ruby inferior a 2.3, puede reemplazarlo
&.last
con.try(:last)
Cualquiera de los dos es solo una protección si su hash de origen está vacío:{}
fuente
Esto devolverá la última clave del hash ordenada por tamaño; sin embargo, puede haber dos claves con el mismo valor.
fuente