如何将值推送到哈希中的数组值

How to push a value to an array value in a hash

我正在尝试使用一个范围将不同的数组设置为散列值,然后将一个值推入其中一个数组。我想要这个结果:

hash[0] << 3 
hash #=> {0=>[3], 1=>[], 2=>[], 3=>[]}

我这样做了:

hash = Hash[(0..9).to_a.product([Array.new(0)])]
#=> {0=>[], 1=>[], 2=>[], 3=>[], 4=>[], 5=>[], 6=>[], 7=>[], 8=>[], 9=>[], 10=>[]}
hash[0] << 3 #=> [3]
hash #=> {0=>[3], 1=>[3], 2=>[3], 3=>[3], 4=>[3], 5=>[3], 6=>[3], 7=>[3], 8=>[3], 9=>[3], 10=>[3]}

我假设我得到输出的原因是因为我所有的键都引用同一个数组而不是不同的数组。

我怎样才能得到预期的结果?

您必须为每个键分配一个新数组。有很多方法可以做到这一点。这是一对:

hash = (0..9).each_with_object({}) { |i, result| result[i] = [] }
hash = (0..9).map{|i| [i, []]}.to_h