Hash'e yeni öğe nasıl eklenir


177

Ruby'de yeniyim ve mevcut hash'e nasıl yeni öğe ekleyeceğimi bilmiyorum. Örneğin, ilk önce hash oluşturuyorum:

hash = {item1: 1}

bundan sonra bu gibi karma var bu yüzden item2 eklemek istiyorum:

{item1: 1, item2: 2}

Karma üzerinde hangi yöntemi yapacağımı bilmiyorum, biri bana yardımcı olabilir mi?

Yanıtlar:


305

Karma oluşturun:

hash = {:item1 => 1}

Buna yeni bir öğe ekleyin:

hash[:item2] = 2

7
Birleştirme kullanın ! yöntem hash.merge!(item2: 2)için birleştirme ve değer tasarruf !
maguri

3
@maguri tek bir argüman olduğundakinden hash.merge!(item2: 2)daha yavaş performans gösterirhash[:item2] = 2
Rahul Dess

72

Başka bir sağlamadan yeni öğeler eklemek istiyorsanız - kullanım mergeyöntemini kullanın :

hash = {:item1 => 1}
another_hash = {:item2 => 2, :item3 => 3}
hash.merge(another_hash) # {:item1=>1, :item2=>2, :item3=>3}

Özel durumunuzda şunlar olabilir:

hash = {:item1 => 1}
hash.merge({:item2 => 2}) # {:item1=>1, :item2=>2}

ancak yalnızca bir öğe daha eklemeniz gerektiğinde kullanmak akıllıca değildir.

mergeDeğerlerin mevcut anahtarlarla değiştirilmesine dikkat edin :

hash = {:item1 => 1}
hash.merge({:item1 => 2}) # {:item1=>2}

tıpkı hash[:item1] = 2

Ayrıca, mergeyöntemin (elbette) karma değişkeninin orijinal değerini etkilemediğine dikkat etmelisiniz - yeni bir birleştirilmiş karma döndürür. Hash değişkeninin değerini değiştirmek istiyorsanız merge!bunun yerine şunu kullanın:

hash = {:item1 => 1}
hash.merge!({:item2 => 2})
# now hash == {:item1=>1, :item2=>2}

35

hash.store (anahtar, değer) - Bir anahtar / değer çiftini karmaya kaydeder .

Misal:

hash   #=> {"a"=>9, "b"=>200, "c"=>4}
hash.store("d", 42) #=> 42
hash   #=> {"a"=>9, "b"=>200, "c"=>4, "d"=>42}

Documentation


27

Bu kadar basit:

irb(main):001:0> hash = {:item1 => 1}
=> {:item1=>1}
irb(main):002:0> hash[:item2] = 2
=> 2
irb(main):003:0> hash
=> {:item1=>1, :item2=>2}


4
hash_items = {:item => 1}
puts hash_items 
#hash_items will give you {:item => 1}

hash_items.merge!({:item => 2})
puts hash_items 
#hash_items will give you {:item => 1, :item => 2}

hash_items.merge({:item => 2})
puts hash_items 
#hash_items will give you {:item => 1, :item => 2}, but the original variable will be the same old one. 

0

Karma oluştur:

h = Hash.new
=> {}

Şimdi karma içine şu şekilde ekleyin:

h = Hash["one" => 1]

2
Bu şekilde birden fazla anahtar eklemeyi denerseniz, her seferinde yeni bir karma oluşturduğunuzu görürsünüz. Muhtemelen istediğin şey değil. Eğer Ve olduğunu istediğini, sen gerekmez Hash.new, çünkü ne olursa olsun bir kısmını Hash[]zaten yeni bir karma yaratıyor.
philomory
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.