データベースクエリからの値のハッシュがあります:
a1 = {:a => 1, :b => 2 }
そして、サードパーティライブラリの値の別のハッシュ:
b1 = {'a' => 1, 'b' => 2 }
に相当するものがあるa1
かどうかを確認したいと思います。それはどのように行われますか?で、から不足しているキーがあるかどうかを確認できます。'a'
:a
b1
a1
私が欲しいのは、キーをキー'a'
と同じように扱うことです:a
。
使用できますto_sym
a.has_key?('a'.to_sym)
ハッシュを指定すると、いくつかのオプションがありますh
。
すべてのキーを文字列に変換できます。
Hash[h.map { |k, v| [k.to_s, v] }]
すべてのキーを記号に変換できます。
Hash[h.map { |k, v| [k.to_sym, v] }]
ActiveSupport(Railsに無料で付属)から提供されるHashWithIndifferentAccessを使用できます。
HashWithIndifferentAccess.new(h)
b1
これにより、(シンボルキーとして)存在しない(文字列)キーの配列が次の場所に表示されa1
ます。
b1.keys - a1.keys.map { |key| key.to_s }
その後、次のことができます。
missing = b1.keys - a1.keys.map { |key| key.to_s }
missing.each do |key|
a1[key.to_sym] = b1[key]
end
これは、常に文字列キーのみがあり、からキーと値のペアが欠落b1
していることだけを心配していることを前提としています。目標は、欠落しているペアを(シンボルキーを使用して)に挿入することです。これらはすべて、質問から正しいように聞こえます。これらの仮定のいずれかが誤りである場合、これは少なくともあなたが始めるのに役立つはずです。a1
b1
a1