-1

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

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

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

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

4

1 回答 1

3

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

hash = (0..9).each_with_object({}) { |i, result| result[i] = [] }
hash = (0..9).map{|i| [i, []]}.to_h
于 2018-03-16T17:51:06.247 回答