Ruby Language Valores de acceso


Ejemplo

Los valores individuales de un hash se leen y escriben utilizando los métodos [] y []= :

my_hash = { length: 4, width: 5 }

my_hash[:length] #=> => 4

my_hash[:height] = 9

my_hash #=> {:length => 4, :width => 5, :height => 9 }

De forma predeterminada, el acceso a una clave que no se ha agregado al hash devuelve nil , lo que significa que siempre es seguro intentar buscar el valor de una clave:

my_hash = {}

my_hash[:age] # => nil

Los hashes también pueden contener claves en cadenas. Si intenta acceder a ellos normalmente, solo devolverá un valor nil , en lugar de eso, acceda a ellos mediante sus claves de cadena:

my_hash = { "name" => "user" }

my_hash[:name]    # => nil
my_hash["name"]   # => user

Para situaciones en las que se espera o se requiere que existan claves, los hash tienen un método de fetch que generará una excepción al acceder a una clave que no existe:

my_hash = {}

my_hash.fetch(:age) #=> KeyError: key not found: :age

fetch acepta un valor predeterminado como su segundo argumento, que se devuelve si la clave no se ha establecido previamente:

my_hash =  {}
my_hash.fetch(:age, 45) #=> => 45

fetch también puede aceptar un bloque que se devuelve si la clave no se ha establecido previamente:

my_hash = {}
my_hash.fetch(:age) { 21 } #=> 21

my_hash.fetch(:age) do |k|
  puts "Could not find #{k}"
end

#=> Could not find age

Los elementos hash también admiten un método de store como un alias para []= :

my_hash = {}

my_hash.store(:age, 45)

my_hash #=> { :age => 45 }

También puede obtener todos los valores de un hash utilizando el método de values :

my_hash = { length: 4, width: 5 }

my_hash.values #=> [4, 5]

Nota: esto es solo para Ruby #dig es útil para Hash anidados. Extrae el valor anidado especificado por la secuencia de objetos idx llamando a dig en cada paso, devolviendo nil si algún paso intermedio es nulo.

h = { foo: {bar: {baz: 1}}}

h.dig(:foo, :bar, :baz)   # => 1
h.dig(:foo, :zot, :xyz)   # => nil

g = { foo: [10, 11, 12] }
g.dig(:foo, 1)            # => 11