2012-02-10 12 views
7

¿Cómo puedo agregar un valor en un objeto Hash usando una clave que ya tiene un valor? Así, por ejemplo si tengoAgregar un valor en un objeto hash (en Ruby), utilizando una clave ya existente?

>> my_hash = Hash.new 
>> my_hash[:my_key] = "Value1" 
# then append a value, lets say "Value2" to my hash, using that same key "my_key" 
# so that it can be 
>> my_hash[:my_key] 
=> ["Value1", "Value2"] 

Sé que es fácil de escribir mi propio método, pero yo sólo quería saber si hay una construida en el método.

Respuesta

9

No sé si me falta el punto, pero ¿ha considerado lo siguiente:

1.9.3 (main):0 > h={} 
=> {} 
1.9.3 (main):0 > h[:key] = [] 
=> [] 
1.9.3 (main):0 > h[:key] << "value1" 
=> ["value1"] 
1.9.3 (main):0 > h[:key] << "value2" 
=> ["value1", "value2"] 
1.9.3 (main):0 > h[:key] 
=> ["value1", "value2"] 
+0

oh ok ... así que básicamente estoy usando una matriz dentro de un hash ... lo que sucedió fue que cuando traté de hacer h [: key] << "value2" sin hacer h [: key] = [], y siguió concatenando las cadenas y devolviendo "value1value2", así que supongo que tengo que hacer una matriz explícitamente. Gracias – bernabas

+0

@bernabasd ¡Más que bienvenido! – lucapette

9

El Camino Rubí, 2ª edición tiene un capítulo entero sobre los hashes de valores múltiples si no recuerdo mal. De todos modos, no existe un comportamiento integrado para este comportamiento.

Sin embargo, puede pasar un buen rato pasando un bloque en Hash.new.

$ irb 
>> h = Hash.new { |hash, key| hash[key] = [] } 
=> {} 
>> h[:a] << "Value1" 
=> ["Value1"] 
>> h[:a] << "Value2" 
=> ["Value1", "Value2"] 
>> h 
=> {:a=>["Value1", "Value2"]} 
>> 

Si desea []= a anexar siempre al valor, a continuación, tendrá que parche mono. De nuevo, nada incorporado para trabajar de esa manera.

+1

+1 para pasar un bloque a 'Hash # new'. ¡Quiéralo! – lucapette

Cuestiones relacionadas