Bir hash'iniz varsa, anahtarla referans vererek ona öğeler ekleyebilirsiniz:
hash = { }
hash[:a] = 'a'
hash[:a]
# => 'a'
Burada, [ ]
boş bir dizi oluşturduğu gibi , { }
boş bir karma oluşturacaktır.
Diziler, belirli bir sırada sıfır veya daha fazla öğeye sahiptir, burada öğeler çoğaltılabilir. Kareler, anahtara göre düzenlenmiş sıfır veya daha fazla öğeye sahiptir ; burada anahtarlar yinelenemez ancak bu konumlarda saklanan değerler olabilir.
Ruby'deki hasarlar çok esnektir ve ona atabileceğiniz neredeyse her türden anahtarlara sahip olabilir. Bu, onu diğer dillerde bulduğunuz sözlük yapılarından farklı kılar.
Bir hash anahtarının belirli doğasının genellikle önemli olduğunu akılda tutmak önemlidir:
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, Symbol ve String adresleme yöntemleri arasında serbestçe dönüşüm yapacağı HashWithIndifferentAccess sağlayarak bunu biraz karıştırır.
Ayrıca sınıflar, sayılar veya diğer Hash'lar dahil hemen hemen her şeyi dizine alabilirsiniz.
hash = { Object => true, Hash => false }
hash[Object]
# => true
hash[Hash]
# => false
hash[Array]
# => nil
Kareler Dizilere dönüştürülebilir ve bunun tersi de geçerlidir:
# 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"}
Bir karma "ekleme" söz konusu olduğunda, bunu birer birer yapabilir veya merge
karmaları birleştirmek için yöntemi kullanabilirsiniz :
{ :a => 'a' }.merge(:b => 'b')
# {:a=>'a',:b=>'b'}
Bunun orijinal hash'i değiştirmediğini, bunun yerine yeni bir tane döndürdüğünü unutmayın. Bir hash'i diğeriyle birleştirmek istiyorsanız, merge!
yöntemi kullanabilirsiniz :
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'}
String ve Array üzerindeki birçok yöntem gibi !
, bunun yerinde bir işlem olduğunu gösterir.