我有一个类似于
{: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"