{ 'a' : [1],'b' : [2,3,4] }
我使用Array来初始化Hash.
irb> hash = Hash.new([]) => {}
然后开始使用它:
irb> hash['a'] << 1 => [1] irb> hash['b'] << 2 => [1,2]
但事实证明:
irb> hash => {}
hash = Hash.new{|h,k| h[k] = []} hash['a'] << 1 # => [1] hash['b'] << 2 # => [2]
您获得意外结果的原因是您将空数组指定为默认值,但使用了相同的数组;没有复制.正确的方法是使用新的空数组初始化值,就像在我的代码中一样.