Cómo comprobar si el valor está presente en un hash?

Estoy usando Rails y tengo un hash del objeto. Quiero buscar con el hash para un valor específico. No sé las claves asociadas con ese valor.

¿Cómo puedo comprobar si un valor está presente en un hash? También, ¿cómo puedo encontrar la clave asociada a ese valor específico?

8 Kommentare

  1. 53

    Hash incluye Enumerable, así que usted puede utilizar todos los métodos en los que el módulo de atravesar el hash. También tiene la práctica de este método:

    hash.has_value?(value_you_seek)

    Para encontrar la clave asociada a ese valor:

    hash.key(value_you_seek)

    Este Documentación de la API para Ruby (1.9.2) debe ser útil.

    • Esto no atraviesan anidada hash
  2. 5

    La forma más sencilla de comprobar varios valores que están presentes en un hash es:

    h = { a: :b, c: :d }
    h.values_at(:a, :c).all? #=> true
    h.values_at(:a, :x).all? #=> false

    En caso de que usted necesita para comprobar también en los valores en blanco en los Rieles con ActiveSupport:

    h.values_at(:a, :c).all?(&:present?)

    o

    h.values_at(:a, :c).none?(&:blank?)

    La misma en Ruby sin ActiveSupport podría ser hecho por el paso de un bloque:

    h.values_at(:a, :c).all? { |i| i && !i.empty? }
  3. 3

    Imagine que usted tiene las siguientes Array de hashes

    available_sports = [{name:'baseball', label:'MLB Baseball'},{name:'tackle_football', label:'NFL Football'}]

    Hacer algo como esto hará el truco

    available_sports.any? {|h| h['name'] == 'basketball'}

    => false


    available_sports.any? {|h| h['name'] == 'tackle_football'}

    => true

  4. 1

    La clase Hash tiene la seleccione método que devolverá un nuevo hash de las entradas para que el bloque es cierto;

    h = { "a" => 100, "b" => 200, "c" => 300 }
    h.select {|k,v| v == 200}  #=> {"b" => 200}

    De esta manera se le busca por su valor, y obtener su clave!

    • ¿Por qué hacer esto cuando Hash ha construido en los métodos?
  5. 1

    Si usted hash.values, ahora tiene una matriz.

    Sobre matrices usted puede utilizar el Enumerable método de búsqueda incluir?

    hash.values.include?(value_you_seek)
  6. 0

    Mientras Hash#has_key? funciona, pero, como Matz escribió aquí, se ha quedado obsoleto en favor de Hash#key?.

    Hash‘s key? método dice que si una clave está presente o no.

    hash.key?(:some_key)

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea