2011-12-30 310 views
23

的獲得價值我有一個像紅寶石 - 哈希

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

哈希和我有一個變量k這將對價值'key1''key2'

我想將k的值存入變量v

有沒有什麼辦法可以達到這個目的?用ifcase?單線解決方案是首選。請幫忙。

回答

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"