在Ruby中,将哈希中的所有键从字符串转换为符号的(最快/最干净/直接)方法是什么?
这在解析YAML时非常方便。
my_hash = YAML.load_file('yml')
我希望能够使用:
my_hash[:key]
而不是:
my_hash['key']
在Ruby中,将哈希中的所有键从字符串转换为符号的(最快/最干净/直接)方法是什么?
这在解析YAML时非常方便。
my_hash = YAML.load_file('yml')
我希望能够使用:
my_hash[:key]
而不是:
my_hash['key']
当前回答
http://api.rubyonrails.org/classes/Hash.html#method-i-symbolize_keys
hash = { 'name' => 'Rob', 'age' => '28' }
hash.symbolize_keys
# => { name: "Rob", age: "28" }
其他回答
facet的Hash#deep_rekey也是一个不错的选择,特别是:
如果你在项目中发现了其他糖的用途, 如果您更喜欢代码可读性而不是神秘的一行程序。
示例:
require 'facets/hash/deep_rekey'
my_hash = YAML.load_file('yml').deep_rekey
更短的一行代码:
my_hash.inject({}){|h,(k,v)| h.merge({ k.to_sym => v}) }
这里有很多答案,但rails函数的一个方法是hash.symbolize_keys
这个怎么样:
my_hash = HashWithIndifferentAccess.new(YAML.load_file('yml'))
# my_hash['key'] => "val"
# my_hash[:key] => "val"
在Rails中,你可以使用:
{'g'=> 'a', 2 => {'v' => 'b', 'x' => { 'z' => 'c'}}}.deep_symbolize_keys!
转换:
{:g=>"a", 2=>{:v=>"b", :x=>{:z=>"c"}}}