私のようなハッシュがあります
{:key1 => "value1", :key2 => "value2"}
変数k
があり、その値は'key1'
または'key2'
。
k
の値を変数v
に取得したい。
if
またはcase
を使用せずにこれを達成する方法はありますか?単一回線ソリューションが推奨されます。助けてください。
キーを文字列からシンボルに変換し、ハッシュで検索を実行します。
hash = {:key1 => "value1", :key2 => "value2"}
k = 'key1'
hash[k.to_sym] # or iow, hash[:key1], which will return "value1"
Railsは HashWithIndifferentAccess
と呼ばれるこのクラスを使用します。これは、このような場合に非常に役立つことが証明されています。質問にRubyでタグ付けしただけであることは知っていますが、このクラスの実装をRailsのソースから盗み、コードベース全体で文字列から記号へ、および記号から文字列への変換を避けることができます。記号または文字列をキーとして使用して、値にアクセスできるようにします。
hash = HashWithIndifferentAccess.new({:key1 => "value1", :key2 => "value2"})
hash[:key1] # "value1"
hash['key1'] # "value1"