From: Robert Klemme Date: 2009-11-02T19:08:37+09:00 Subject: Re: Merging hashes using both symbols and strings as keys 2009/10/30 7stud -- : > shenry wrote: >> I'd like to avoid using strings as the keys in >> my default hash. >> > > h1 =  { :name => "Joe", :age => 50 } > h2 = { "name" => "Bill", :phone => "123-4567"} > > h2.each do |key, val| >  h1[key.to_sym] = val > end > > p h1 > > --output:-- > {:age=>50, :phone=>"123-4567", :name=>"Bill"} Typically you do not want to modify defaults so I'd probably do irb(main):001:0> default = { :name => "Joe", :age => 50 }.freeze => {:name=>"Joe", :age=>50} irb(main):002:0> params = { "name" => "Bill" } => {"name"=>"Bill"} irb(main):003:0> new_hash = default.dup => {:name=>"Joe", :age=>50} irb(main):004:0> params.each {|k,v| new_hash[k.to_sym]=v} => {"name"=>"Bill"} irb(main):005:0> new_hash => {:name=>"Bill", :age=>50} If you are allowed to change params you could do irb(main):001:0> default = { :name => "Joe", :age => 50 }.freeze => {:name=>"Joe", :age=>50} irb(main):002:0> params = { "name" => "Bill" } => {"name"=>"Bill"} irb(main):003:0> default.each {|k,v| params[k.to_s] ||= v} => {:name=>"Joe", :age=>50} irb(main):004:0> params => {"name"=>"Bill", "age"=>50} Kind regards robert -- remember.guy do |as, often| as.you_can - without end http://blog.rubybestpractices.com/