I’m getting some rather unexpected behavior from hashes in ruby
here’s a simplified demonstration of the problem
estdata = ["a","b","c"]
outputHash = Hash.new({:IDs => [], :count => 0})
estdata.each do |x|
outputHash[x][:IDs] << x
outputHash[x][:count] +=1
end
p outputHash # => {}
p outputHash["a"] # => {:count=>3, :IDs=>["a", "b", "c"]}
So firstly, why does the first p output an empty hash when clearly outputHash isn’t empty?
And secondly and much more to my frustration and confusion, why does is seem that every key in the has points to a single value (the hash containing the :count and :IDs keys) and how would I get around this?
With
Hash.newand a parameter everything will point to the same object.What you want is the block form: