rails - ruby hash to json
¿Cómo encontrar la clave del hash de mayor valor? (7)
Tengo el siguiente hash {"CA"=>2, "MI"=>1, "NY"=>1}
¿Cómo puedo devolver el par de valor clave máximo usando ruby? Me gustaría que me devuelva "CA"
Encontré de esta manera, devuelva la clave del primer valor máximo
hash.key(hash.values.max)
Esto devolverá el par clave-valor hash máximo dependiendo del valor de los elementos hash:
def largest_hash_key(hash)
hash.max_by{|k,v| v}
end
Esto devolverá la última clave del hash ordenada por tamaño; sin embargo, puede haber dos claves con el mismo 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)
Hoy hice esto sobre un problema similar y terminé con esto:
hash = { "CA"=>2, "MI"=>1, "NY"=>1 }
hash.invert.max&.last
=> "CA"
Para Ruby menor de 2.3, puede reemplazar &.last
con .try(:last)
Cualquiera de los dos es solo una salvaguarda si su hash fuente está vacío: {}
Otra forma podría ser la siguiente:
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 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.
Puede usar el método de selección si desea que se devuelva el par de valores clave:
hash.select {|k,v| v == hash.values.max }
Si desea recuperar más de un par de valores clave 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.
def descend_sort(hash)
hash = hash.sort_by {|k,v| v}.reverse
end
Clave del mayor valor
puts *hash[0][0]
Obtener máximo y mínimo
puts *hash[0], *hash[hash.length-1]
Segundo par de valores clave más grande
Hash[*hash[1]]
Para convertir la matriz de hash de nuevo en un hash
hash.to_h