Si vous avez un hachage, vous pouvez y ajouter des éléments en les référençant par clé:
hash = { }
hash[:a] = 'a'
hash[:a]
# => 'a'
Ici, comme [ ]
crée un tableau vide, { }
va créer un hachage vide.
Les tableaux ont zéro ou plusieurs éléments dans un ordre spécifique, où les éléments peuvent être dupliqués. Les hachages ont zéro ou plusieurs éléments organisés par clé , où les clés ne peuvent pas être dupliquées mais les valeurs stockées dans ces positions peuvent l'être.
Les hachages en Ruby sont très flexibles et peuvent avoir des clés de presque tous les types que vous pouvez lui lancer. Cela le rend différent des structures de dictionnaire que vous trouvez dans d'autres langues.
Il est important de garder à l'esprit que la nature spécifique d'une clé de hachage est souvent importante:
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 cela quelque peu en fournissant HashWithIndifferentAccess où il convertira librement entre les méthodes d'adressage Symbol et String.
Vous pouvez également indexer sur presque tout, y compris les classes, les nombres ou d'autres hachages.
hash = { Object => true, Hash => false }
hash[Object]
# => true
hash[Hash]
# => false
hash[Array]
# => nil
Les hachages peuvent être convertis en 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 d '"insérer" des éléments dans un hachage, vous pouvez le faire un par un, ou utiliser la merge
méthode pour combiner des hachages:
{ :a => 'a' }.merge(:b => 'b')
# {:a=>'a',:b=>'b'}
Notez que cela ne modifie pas le hachage d'origine, mais en renvoie un nouveau. Si vous souhaitez combiner un hachage dans un autre, vous pouvez utiliser la 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 de nombreuses méthodes sur String et Array, le !
indique qu'il s'agit d'une opération sur place .