Si tiene un hash, puede agregar elementos haciéndolo referenciar por clave:
hash = { }
hash[:a] = 'a'
hash[:a]
# => 'a'
Aquí, como [ ]
crea una matriz vacía, { }
creará un hash vacío.
Las matrices tienen cero o más elementos en un orden específico, donde los elementos pueden estar duplicados. Los valores hash tienen cero o más elementos organizados por la clave, donde las claves pueden no estar duplicadas pero los valores almacenados en esas posiciones pueden ser.
Hashes en Ruby son muy flexibles y pueden tener claves de casi cualquier tipo que se le pueda arrojar. Esto lo hace diferente de las estructuras de diccionario que encuentre en otros idiomas.
Es importante tener en cuenta que la naturaleza específica de una tecla de un hash menudo importa:
hash = { :a => 'a' }
# Fetch with Symbol :a finds the right value
hash[:a]
# => 'a'
# Fetch with the String 'a' finds nothing
hash['a']
# => nil
# Assignment with the key :b adds a new entry
hash[:b] = 'Bee'
# This is then available immediately
hash[:b]
# => "Bee"
# The hash now contains both keys
hash
# => { :a => 'a', :b => 'Bee' }
Ruby on Rails confunde esta manera que provee de HashWithIndifferentAccess donde va a convertir libremente entre los métodos de símbolos y de Cuerda de direccionamiento.
También puede indexar casi cualquier cosa, incluidas las clases, los números u otros valores hash.
hash = { Object => true, Hash => false }
hash[Object]
# => true
hash[Hash]
# => false
hash[Array]
# => nil
hashes se pueden convertir en las matrices y viceversa:
# Like many things, Hash supports .to_a
{ :a => 'a' }.to_a
# => [[:a, "a"]]
# Hash also has a handy Hash[] method to create new hashes from arrays
Hash[[[:a, "a"]]]
# => {:a=>"a"}
Cuando se trata de "inserción" cosas en un hash que puede hacerlo de uno en uno, o utilizar el método merge
para combinar valores hash:
{ :a => 'a' }.merge(:b => 'b')
# {:a=>'a',:b=>'b'}
Tenga en cuenta que esto no altera el hash original, sino que devuelve uno nuevo. Si desea combinar una almohadilla en otro, se puede utilizar el método de merge!
:
hash = { :a => 'a' }
# Returns the result of hash combined with a new hash, but does not alter
# the original hash.
hash.merge(:b => 'b')
# => {:a=>'a',:b=>'b'}
# Nothing has been altered in the original
hash
# => {:a=>'a'}
# Combine the two hashes and store the result in the original
hash.merge!(:b => 'b')
# => {:a=>'a',:b=>'b'}
# Hash has now been altered
hash
# => {:a=>'a',:b=>'b'}
Al igual que muchos métodos en cadena y Array, el !
indica que se trata de una operaciónen el lugar.
Una gran cantidad de información valiosa, pero carente de la formulación más básica, respondida simplemente por @robbrit. – danh
Por favor, edite su respuesta para que realmente responda la pregunta que se le hizo, preferiblemente en algún lugar cerca de la parte superior. Sería grosero de mi parte hacerlo por ti. – Stephan
@Stephan Se agregó un ejemplo más conciso en la parte superior. – tadman