ruby-on-rails - create - key value ruby
¿Cómo verificar si el valor específico está presente en un hash? (7)
Hash incluye Enumerable , por lo que puede usar los muchos métodos en ese módulo para recorrer el hash. También tiene este práctico método:
hash.has_value?(value_you_seek)
Para encontrar la clave asociada con ese valor:
hash.key(value_you_seek)
Esta documentación API para Ruby (1.9.2) debería ser útil.
Estoy usando Rails y tengo un objeto hash. Quiero buscar el hash por un valor específico. No sé las claves asociadas con ese valor.
¿Cómo puedo verificar si un valor específico está presente en un hash? Además, ¿cómo encuentro la clave asociada con ese valor específico?
La clase Hash
tiene el método de select que devolverá un nuevo hash de entradas para las cuales el bloque es verdadero;
h = { "a" => 100, "b" => 200, "c" => 300 }
h.select {|k,v| v == 200} #=> {"b" => 200}
¡De esta manera buscarás por valor y obtendrás tu clave!
La forma más sencilla de verificar múltiples valores está presente 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 necesite verificar también los valores en blanco en Rails con ActiveSupport:
h.values_at(:a, :c).all?(&:present?)
o
h.values_at(:a, :c).none?(&:blank?)
Lo mismo en Ruby sin ActiveSupport podría hacerse pasando un bloque:
h.values_at(:a, :c).all? { |i| i && !i.empty? }
Mientras Hash#has_key?
funciona pero, como escribió Matz here , ha sido desaprobado a favor de la Hash#key?
.
¿La key?
Hash
key?
método le dice si una clave dada está presente o no.
hash.key?(:some_key)
Si haces hash.values
, ahora tienes una matriz.
En matrices, puede utilizar el método de búsqueda Enumerable include?
hash.values.include?(value_you_seek)
Una versión aún más corta que podría usar sería hash.values