如何转换 Ruby 散列,使其所有键都是字符串

How do I convert a Ruby hash so that all of its keys are strings

我有一个 ruby 散列,它看起来像:

{ id: 123, name: "test" }

我想将其转换为:

{ "id" => 123, "name" => "test" }

如果您使用的是 Rails 或 ActiveSupport:

hash = { id: 123, description: "desc" }
hash.stringify #=> { "id" => 123, "name" => "test" }

如果你不是:

hash = { id: 123, name: "test" }
Hash[hash.map { |key, value| [key.to_s, value] }] #=> { "id" => 123, "name" => "test" }

我喜欢 each_with_object 这种情况:

hash = { id: 123, name: "test" }
hash.each_with_object({}) { |(key, value), h| h[key.to_s] = value }
#=> { "id" => 123, "name" => "test" }

在纯 Ruby 中(没有 Rails),您可以使用 Enumerable#map and Array#to_h:

的组合来做到这一点
hash = { id: 123, name: "test" }
hash.map{|key, v| [key.to_s, v] }.to_h
h = { id: 123, name: "test" }

假设你想改变 h:

h.keys.each { |k| h[k.to_s] = h.delete(k) }
h #=> {"id"=>123, "name"=>"test"}