Si vous avez une table de hachage, vous pouvez ajouter des éléments par leur référencement par les principaux:
hash = { }
hash[:a] = 'a'
hash[:a]
# => 'a'
Ici, comme [ ]
crée un tableau vide, { }
va créer un vide de hachage.
Les tableaux avoir zéro, un ou plusieurs éléments dans un ordre spécifique, où les éléments peuvent être dupliqués. Hachages avoir zéro, un ou plusieurs éléments , organisées par des, où les touches ne peut pas être dupliqué, mais les valeurs stockées dans ces positions peuvent être.
Hachages en Ruby sont très flexibles et peuvent avoir des clés de presque n'importe quel type que vous pouvez jeter à elle. Ce qui fait la différence avec le dictionnaire des structures que vous trouverez dans d'autres langues.
Il est important de garder à l'esprit que la nature spécifique d'une clé de hachage souvent les questions:
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 confond un peu cela en fournissant HashWithIndifferentAccess où il vous permet de convertir librement entre le Symbole et la Chaîne des méthodes d'évaluation.
Vous pouvez également l'index sur à peu près tout, y compris les classes, de nombres ou d'autres valeurs de hachage.
hash = { Object => true, Hash => false }
hash[Object]
# => true
hash[Hash]
# => false
hash[Array]
# => nil
Hachages peuvent être convertis à des Tableaux et vice-versa:
# 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"}
Quand il s'agit de "l'insertion" des choses dans une table de Hachage, vous pouvez le faire une à une, ou de l'utilisation de l' merge
méthode pour combiner les hachages:
{ :a => 'a' }.merge(:b => 'b')
# {:a=>'a',:b=>'b'}
Notez que cela ne modifie pas le hachage d'origine, mais au lieu de cela renvoie une nouvelle. Si vous souhaitez les combiner en une hachage dans un autre, vous pouvez utiliser l' merge!
méthode:
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'}
Comme beaucoup de méthodes sur des chaînes de caractères et tableaux, l' !
indique qu'il est en place de l'opération.