Tengo el siguiente hash {"CA"=>2, "MI"=>1, "NY"=>1}

¿Cómo puedo devolver el máximo valor de la clave par el uso de ruby? Me gustaría volver «CA»

  • Lo que si hay varias claves con el mismo valor más grande?
  • de regreso a sólo una
InformationsquelleAutor JZ. | 2011-05-18

7 Comentarios

  1. 213

    Esto devolverá max hash par clave-valor en función del valor de hash elementos:

    def largest_hash_key(hash)
      hash.max_by{|k,v| v}
    end
    • vale la pena destacar obtiene un 2 elemento de la matriz con [clave, valor]
    • hash.max_by{ |k,v| v }[0] da la clave.
    • También vale la pena destacar un empate va a ir a la primera en el orden de posición.
    • Usted también puede hacer hash.max_by(&:apellido) de la pareja y hash.max_by(&:último).primero para la clave.
  2. 17

    Otra forma podría ser como sigue:

    hash.each { |k, v| puts k if v == hash.values.max }

    Este se ejecuta a través de cada par clave-valor y devuelve (o en este caso pone s) llave(s) donde el valor es igual al valor máximo de todos los valores. Esto debería devolver más de una clave, si hay un empate.

  3. 5

    Puede utilizar el método select si usted desea que la clave par de valor devuelto:

    hash.select {|k,v| v == hash.values.max }
  4. 3

    Si quieres recuperar más de un valor de clave de pareja basada en el orden(el segundo más grande, más pequeño, etc.), de una manera más eficiente será la de ordenar el hash de una vez y, a continuación, obtener los resultados deseados.

    def descend_sort(hash)
       hash = hash.sort_by {|k,v| v}.reverse
    end

    Clave de mayor valor

    puts *hash[0][0]

    Obtener max y min

    puts *hash[0], *hash[hash.length-1]

    2º mayor valor de la clave par

    Hash[*hash[1]]

    Para convertir el hash de la matriz de vuelta en un hash

    hash.to_h
  5. 1

    Hice esto hoy en día en un problema similar y terminó con este:

    hash = { "CA"=>2, "MI"=>1, "NY"=>1 }
    
    hash.invert.max&.last
    => "CA" 

    Para Ruby menos de 2.3 puede reemplazar &.last con .try(:last)
    Cualquiera de las dos es sólo una medida preventiva por si su fuente de hash es vacía: {}

  6. -3

    Este volverá a la última tecla de la hash ordenados por tamaño; sin embargo, puede haber dos llaves 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)
    • respuesta seleccionada? may_by es mucho mejor que un bajo nivel de especie. Es más compacto y utiliza menos memoria que una especie+la última.

Dejar respuesta

Please enter your comment!
Please enter your name here