Search code examples
rubyhashnested

In Ruby, how to set a default value for a nested hash?


I recently looked for a way to correctly create and use nested hashes in Ruby. I promptly found a solution by Paul Morie, who answered his own question: hash = Hash.new { |h,k| h[k] = {} }

I promptly went to use this and am glad to report it works. However, as the title says, I'd like the "secondary", "inside" hashes to return 0 by default.

I'm aware that you can define the default return value of a hash both in its constructor ("Hash.new(0)") or using .default ("hash.default(0)").

But how would you do this with hashes inside a hash?


Solution

  • Apparently I only had to do:

    hash = Hash.new { |h,k| h[k] = Hash.new(0) }

    Whoops. I'll try not to be so hasty to ask a question next time.