Объединение хэш-символа ruby ​​с массивом значений в другой хеш с массивом значений

Кажется, я не могу найти ничего, что говорит об этом.

Скажем, у меня есть хеш {"23"=>[0,3]}, и я хочу объединить этот хэш {"23"=>[2,3]}, чтобы получить результат с этим хешем {"23"=>[0,2,3]}

Или как насчет {"23"=>[3]}, объединенного с {"23"=>0}, чтобы получить {"23"=>[0,3]}

Спасибо!

Ответ 1

{"23"=>[0,3]}.merge({"23"=>[2,3]}){ |key,oldval,newval| oldval | newval }
#=> {"23"=>[0, 3, 2]}

Более общий способ обработки значений без массива:

{"23"=>[0,3]}.merge({"23"=>[2,3]}) do |key, oldval, newval|
  (newval.is_a?(Array) ? (oldval + newval) : (oldval << newval)).uniq
end

Обновлен с помощью подсказки Marc-André Lafortune.