Rubyでハッシュのキーをシンボルに統一する
ハッシュのキーは全てシンボルにしたい派.しかし,YAML を使っていると「key: value」を load したときに {"key"=>"value"} になってしまう.だからといって「:key: value」と書くのも面倒.
ということで Hash のキーをシンボルに統一するメソッド symbolize_keys を Hash クラスに追加した.
class Hash def symbolize_keys inject({}) do |options, (key, value)| value = value.symbolize_keys if defined?(value.symbolize_keys) options[(key.to_sym rescue key) || key] = value options end end end hash = {"a" => "aaa", "b" => {c: "ccc", "d"=>"ddd"}, "e" => "eee"} # => {"a"=>"aaa", "b"=>{:c=>"ccc", "d"=>"ddd"}, "e"=>"eee"} hash.symbolize_keys # => {:a=>"aaa", :b=>{:c=>"ccc", :d=>"ddd"}, :e=>"eee"}
Rails を再帰的に利用できるように1行追加しただけ.再帰が嫌ならブロック内の1行目(value = ...)を削除.例のようにキーにシンボルと文字列が混ざっていても問題なく動作する.