如何重构这个Ruby代码,旨在将哈希的符号更改为字符串?

mar*_*cgg 1 ruby refactoring

我刚写了这段代码,但我对此并不满意.

data = {}
options.each{ |k,v| data.merge!({k.to_s => v}) }
Run Code Online (Sandbox Code Playgroud)

基本上我有:

{:a => "something", :b => "something else", :c => "blah"}
Run Code Online (Sandbox Code Playgroud)

... 而且我要 ...

{"a" => "something", "b" => "something else", "c" => "blah"}
Run Code Online (Sandbox Code Playgroud)

...为了将其发送到由于某种原因不处理符号的gem.在我编写的代码中,选项是原始哈希,数据是更新的,但如果我只能使用1个变量,那就更好了.

你们怎么重构我的代码?

Joh*_*ooy 6

data = Hash[options.map{ |k,v| [k.to_s,v] }]
Run Code Online (Sandbox Code Playgroud)

对于足够有趣的哈希值,答案之间没有显着差异

require 'benchmark'
options = Hash[('aaaa'..'zzzz').map{|i| [i.to_sym,i]}]
Benchmark.bm(100) do |x|
        x.report("map")   {Hash[options.map{ |k,v| [k.to_s,v] }] }
        x.report("zip")   {Hash[options.keys.map(&:to_s).zip(options.values)]}
        x.report("inject") {options.inject({}) { |h, (k, v)| h[k.to_s] = v; h }}
end

                          user     system      total        real
map                   3.490000   0.090000   3.580000 (  4.049015)
zip                   3.780000   0.020000   3.800000 (  3.925876)
inject                3.710000   0.110000   3.820000 (  4.289286)
Run Code Online (Sandbox Code Playgroud)