使用已经存在的键在散列对象(Ruby中)中追加值?

使用已经存在的键在散列对象(Ruby中)中追加值?,ruby,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"]

如何使用已经有值的键在哈希对象中追加值。比如说 如果我有

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

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

我不知道我是否误解了你的观点,但你是否考虑过以下几点:

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"]
1.9.3(main):0>h={}
=> {}
1.9.3(主):0>h[:键]=[]
=> []
1.9.3(主):0>h[:键][“值1”]
1.9.3(主):0>h[:键][“值1”、“值2”]
1.9.3(主):0>h[:键]
=>[“值1”、“值2”]

如果我没记错的话,Ruby Way第二版有一整章都是关于多值哈希的。无论如何,这种行为没有内在的原因

但是,您可以通过将一个块传递到中来获得一些乐趣

$irb
>>h=Hash.new{| Hash,key | Hash[key]=[]}
=> {}
>>h[:a][“值1”]
>>h[:a][“值1”、“值2”]
>>h
=>{:a=>[“值1”,“值2”]}
>> 

如果希望
[]=
始终附加到值,则需要使用monkey-patch。同样,没有什么内置的东西可以这样工作。

哦,好吧……所以基本上我只是在散列中使用一个数组。。。发生的事情是,当我试图做h[:键]
$ irb
>> h = Hash.new { |hash, key| hash[key] = [] }
=> {}
>> h[:a] << "Value1"
=> ["Value1"]
>> h[:a] << "Value2"
=> ["Value1", "Value2"]
>> h
=> {:a=>["Value1", "Value2"]}
>>