update rails create array ruby hash

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