如何转换 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"}
我有一个 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"}