2012-02-10 111 views
7

如何使用已具有值的键在哈希对象中追加值。因此,例如 如果我有使用已存在的键在散列对象(Ruby中)中追加一个值?

>> 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"] 

我知道它很容易写我自己的方法,但我只是想知道是否有一个内置的方法。

回答

9

我不知道如果我失去了你的观点,但你有没有考虑以下几点:

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

哦好吧...所以基本上我只是在一个哈希中使用数组... ...发生了什么事情,当我试图做h [:key] <<“value2”与出h [:key] = [],它保持连接字符串并返回“value1value2”,所以我想我必须明确地创建一个数组.. ..谢谢 – bernabas 2012-02-11 16:21:03

+0

@bernabasd不止欢迎! – lucapette 2012-02-11 16:28:11

9

Ruby之道,第二版对多值散列整整一章,如果我没有记错。无论如何,这种行为没有内建的。

但是,您可以通过将一个块传递给Hash.new来获得一些乐趣。

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

如果你想[]=始终追加到值,那么你就需要给猴子补丁。再次,没有内置的工作方式。

+1

用于将块传递给'Hash#new'。爱它! – lucapette 2013-09-24 21:54:02

相关问题