So fügen Sie dem Hash ein neues Element hinzu

176

Ich bin neu bei Ruby und weiß nicht, wie ich einem bereits vorhandenen Hash ein neues Element hinzufügen soll. Zum Beispiel konstruiere ich zuerst Hash:

hash = {item1: 1}

danach möchte ich item2 hinzufügen, danach habe ich folgenden Hash:

{item1: 1, item2: 2}

Ich weiß nicht, was ich mit Hash machen soll. Könnte mir jemand helfen?

Иван Бишевац
quelle

Antworten:

304

Erstellen Sie den Hash:

hash = {:item1 => 1}

Fügen Sie ein neues Element hinzu:

hash[:item2] = 2
pjumble
quelle
7
Verwenden merge! Methode hash.merge!(item2: 2)zum Zusammenführen und Speichern des Wertes !
Maguri
3
@maguri arbeitet hash.merge!(item2: 2)langsamer hash[:item2] = 2als wenn es nur ein Argument gibt
Rahul Dess
72

Wenn Sie neue Elemente aus einem anderen Hash hinzufügen möchten, verwenden Sie die folgende mergeMethode:

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

In Ihrem speziellen Fall könnte es sein:

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

Es ist jedoch nicht ratsam, es zu verwenden, wenn Sie nur ein Element mehr hinzufügen möchten.

Achten Sie darauf, dass mergedie Werte durch die vorhandenen Schlüssel ersetzt werden:

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

genau wie hash[:item1] = 2

Beachten Sie auch, dass die mergeMethode (natürlich) den ursprünglichen Wert der Hash-Variablen nicht beeinflusst - sie gibt einen neuen zusammengeführten Hash zurück. Wenn Sie den Wert der Hash-Variablen ersetzen möchten, verwenden Sie merge!stattdessen:

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

hash.store (Schlüssel, Wert) - Speichert ein Schlüssel-Wert-Paar in Hash.

Beispiel:

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

Documentation

shilovk
quelle
27

Es ist so einfach wie:

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}
Niklas B.
quelle
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. 
KrisT
quelle
0

Erstellen Sie einen Hash als:

h = Hash.new
=> {}

Fügen Sie nun Folgendes in den Hash ein:

h = Hash["one" => 1]
Ravi Kashyap
quelle
2
Wenn Sie versuchen, auf diese Weise mehrere Schlüssel einzufügen, werden Sie feststellen, dass Sie jedes Mal einen neuen Hash erstellen. Wahrscheinlich nicht was du willst. Und wenn das ist , was Sie wollen, Sie brauchen nicht den Hash.newTeil , unabhängig, weil Hash[]bereits eine neue Hash erzeugt wird .
Philomory