如何将值推送到散列中的数组值

时间:2018-03-16 17:41:39

标签: ruby ruby-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]}

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

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

1 个答案:

答案 0 :(得分:3)

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

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