rails - ruby hash to json
Cómo agregar un nuevo elemento al hash (7)
Soy nuevo en Ruby y no sé cómo agregar un nuevo elemento al hash ya existente. Por ejemplo, primero construyo hash:
hash = {:item1 => 1}
después de eso, quiero agregar item2, así que después de esto, tengo hash como este:
{:item1 => 1, :item2 =>2}
No sé qué método usar en hash, ¿podría alguien ayudarme?
Crea el hash:
hash = {:item1 => 1}
Agregue un nuevo artículo a él:
hash[:item2] = 2
Crear hash como:
h = Hash.new
=> {}
Ahora inserte en hash como:
h = Hash["one" => 1]
Es tan simple como:
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}
Si desea agregar nuevos elementos de otro hash, use el método de merge
:
hash = {:item1 => 1}
another_hash = {:item2 => 2, :item3 => 3}
hash.merge(another_hash) # {:item1=>1, :item2=>2, :item3=>3}
En su caso específico, podría ser:
hash = {:item1 => 1}
hash.merge({:item2 => 2}) # {:item1=>1, :item2=>2}
pero no es aconsejable usarlo cuando debería agregar solo un elemento más.
Preste atención que merge
reemplazará los valores con las claves existentes:
hash = {:item1 => 1}
hash.merge({:item1 => 2}) # {:item1=>2}
exactamente como hash[:item1] = 2
También debe prestar atención que el método de merge
(por supuesto) no afecta el valor original de la variable hash - devuelve un nuevo hash fusionado. Si desea reemplazar el valor de la variable hash, ¡utilice merge!
en lugar:
hash = {:item1 => 1}
hash.merge!({:item2 => 2})
# now hash == {:item1=>1, :item2=>2}
hash [key] = value Asocia el valor dado por valor con la clave dada por la clave.
hash[:newKey] = "newValue"
De la documentación de Ruby: http://www.tutorialspoint.com/ruby/ruby_hashes.htm
hash.store (clave, valor) : almacena un par clave-valor en hash.
Ejemplo:
hash #=> {"a"=>9, "b"=>200, "c"=>4}
hash.store("d", 42) #=> 42
hash #=> {"a"=>9, "b"=>200, "c"=>4, "d"=>42}
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.