在Ruby中,将哈希中的所有键从字符串转换为符号的(最快/最干净/直接)方法是什么?

这在解析YAML时非常方便。

my_hash = YAML.load_file('yml')

我希望能够使用:

my_hash[:key] 

而不是:

my_hash['key']

当前回答

从Ruby 2.5.0开始,你可以使用哈希#transform_keys或哈希#transform_keys!

{'a' => 1, 'b' => 2}.transform_keys(&:to_sym) #=> {:a => 1, :b => 2}

其他回答

会像下面这样工作吗?

new_hash = Hash.new
my_hash.each { |k, v| new_hash[k.to_sym] = v }

它会复制哈希值,但大多数时候你不会在意。可能有一种不复制所有数据的方法。

参数个数。Symbolize_keys也可以工作。这个方法将哈希键转换为符号并返回一个新的哈希值。

更简洁的是:

Hash[my_hash.map{|(k,v)| [k.to_sym,v]}]

我们想要改变的数组。

strings = ["HTML", "CSS", "JavaScript", "Python", "Ruby"]

将一个新变量作为一个空数组,这样我们就可以。输入符号。

Symbols = []

在这里,我们定义了一个带有块的方法。

字符串。每个{|x| symbols.push(x.intern)}

代码结束。

因此,这可能是在Ruby中将字符串转换为数组中的符号的最直接的方法。创建一个字符串数组,然后创建一个新变量,并将该变量设置为空数组。然后选择第一个用“。”创建的数组中的每个元素。每个“的方法。然后使用分组代码来“。按下"新数组中的所有元素并使用".intern或.to_sym"将所有元素转换为符号。

符号更快,因为它们在代码中节省了更多的内存,并且只能使用一次。符号是哈希中最常用的键,这很好。我不是最好的ruby程序员,但这种形式的代码帮助了我很多。如果有人知道更好的方法,请分享,你也可以使用这个方法哈希!

从Psych 3.0开始,你可以添加symbolize_names:选项

心理。加载("——\n foo: bar") # => {"foo"=>"bar"}

心理。加载("——\n foo: bar", symbolize_names: true) # => {:foo=>"bar"}

注意:如果你的Psych版本低于3.0,symbolize_names:将被默默地忽略。

我的Ubuntu 18.04自带ruby 2.5.1p57