在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']
当前回答
这是嵌套哈希的一行代码
def symbolize_keys(hash)
hash.each_with_object({}) { |(k, v), h| h[k.to_sym] = v.is_a?(Hash) ? symbolize_keys(v) : v }
end
其他回答
我们想要改变的数组。
strings = ["HTML", "CSS", "JavaScript", "Python", "Ruby"]
将一个新变量作为一个空数组,这样我们就可以。输入符号。
Symbols = []
在这里,我们定义了一个带有块的方法。
字符串。每个{|x| symbols.push(x.intern)}
代码结束。
因此,这可能是在Ruby中将字符串转换为数组中的符号的最直接的方法。创建一个字符串数组,然后创建一个新变量,并将该变量设置为空数组。然后选择第一个用“。”创建的数组中的每个元素。每个“的方法。然后使用分组代码来“。按下"新数组中的所有元素并使用".intern或.to_sym"将所有元素转换为符号。
符号更快,因为它们在代码中节省了更多的内存,并且只能使用一次。符号是哈希中最常用的键,这很好。我不是最好的ruby程序员,但这种形式的代码帮助了我很多。如果有人知道更好的方法,请分享,你也可以使用这个方法哈希!
http://api.rubyonrails.org/classes/Hash.html#method-i-symbolize_keys
hash = { 'name' => 'Rob', 'age' => '28' }
hash.symbolize_keys
# => { name: "Rob", age: "28" }
参数个数。Symbolize_keys也可以工作。这个方法将哈希键转换为符号并返回一个新的哈希值。
在Ruby >= 2.5 (docs)中,你可以使用:
my_hash.transform_keys(&:to_sym)
使用旧的Ruby版本?下面是一个单行程序,它将哈希复制到一个新的哈希中,并将键符号化:
my_hash = my_hash.inject({}){|memo,(k,v)| memo[k.to_sym] = v; memo}
使用Rails,您可以使用:
my_hash.symbolize_keys
my_hash.deep_symbolize_keys
更简洁的是:
Hash[my_hash.map{|(k,v)| [k.to_sym,v]}]