【发布时间】:2011-12-30 05:44:41
【问题描述】:
我有一个像
这样的哈希{:key1 => "value1", :key2 => "value2"}
我有一个变量k,其值为'key1' 或'key2'。
我想将k 的值放入变量v。
有什么方法可以在不使用if 或case 的情况下实现这一目标?单线解决方案是首选。请帮忙。
【问题讨论】:
我有一个像
这样的哈希{: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"
【讨论】: