Добавить значение в хеш-объект (в Ruby), используя уже существующий ключ? - PullRequest
8 голосов
/ 10 февраля 2012

Как я могу добавить значение в объект Hash, используя ключ, который уже имеет значение. Так например если у меня есть

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

Я знаю, что легко написать свой собственный метод, но я просто хотел узнать, есть ли встроенный метод.

Ответы [ 2 ]

10 голосов
/ 11 февраля 2012

Я не знаю, упускаю ли я Вашу мысль, но рассматривали ли вы следующее:

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"]
9 голосов
/ 11 февраля 2012

В Ruby Way, 2nd Edition, если я правильно помню, есть целая глава о многозначных хэшах. Независимо от этого, нет встроенного для этого поведения.

Однако вы можете повеселиться, передав блок в Hash.new.

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

Если вы хотите, чтобы []= всегда добавлялось к значению, то вам нужно обезьяньим патчем. Опять же, ничего не встроено, чтобы работать таким образом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...