Creating a new hash with default keys

Use the default value feature for the hash

h = Hash.new(0)

h["a"]      # => 0

In this approach, the key is not set.

h.key?("a") # => false

Other approach is to set the missing key when accessed.

h = Hash.new {|h, k| h[k] = 0}
h["a"]      # => 0
h.key?("a") # => true

Even in this approach, the operations like key? will fail if you haven't accessed the key before.

h.key?("b") # => false
h["b"]      # => 0
h.key?("b") # => true

You can always resort to brute force, which has the least boundary conditions.

h = Hash.new.tap {|h| ["a", "b", "c"].each{|k| h[k] = 0}}
h.key?("b") # => true
h["b"]      # => 0

You should instantiate your hash h first, and then fill it with the contents of the array:

h = {}    
ary = ["a", "b", "c"]
ary.each{|a| h[a] = 0}