2011-12-30 13 views
23

の取得値は、私はルビー - ハッシュ

{:key1 => "value1", :key2 => "value2"}

のようなハッシュを持っていると私は'key1'または'key2'としての価値を持つことになり、変数kを持っています。

kの値を変数vに取得したいとします。

ifまたはcaseを使用してこれを行う方法はありますか?一行の解決策が好ましい。助けてください。

答えて

57

キーを文字列からシンボルに変換し、ハッシュを検索します。

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" 
関連する問題