のようなハッシュを持っています。
キー1 => "値1", :キー2 => "値2"}`とします。
そして、変数 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"