我正在尝试这个:
{:id => 5, :foos => [1,2,3]}.each {|k,v| v.to_s}
但那是回归:
{:id=>5, :foos=>[1, 2, 3]}
我想看到这个:
{:id=>"5", :foos=>"[1, 2, 3]"}
我也尝试了Hash#collect
和Hash#map
的各种变体。有什么想法吗?
答案 0 :(得分:3)
您可以使用Object#inspect
:
{ :id => 5, :foos => [1, 2, 3] }.inject({}) do |hash, (key, value)|
hash.merge key => value.inspect
end
返回:
{ :foos => "[1, 2, 3]", :id => "5" }
或者如果你想让它具有破坏性:
hash = { :id => 5, :foos => [1, 2, 3] }
hash.each_key { |key| hash[key] = hash[key].inspect }
答案 1 :(得分:1)
你的东西不起作用,因为v.to_s不修改v,所以基本上块不做任何事情。
你可以这样做:
hash = {:id => 5, :foos => [1,2,3]}
hash.each_key { |k| hash[k] = hash[k].to_s }
如果您不想修改哈希:
hash = {:id => 5, :foos => [1,2,3]}
new_hash = {}
hash.each_key { |k| new_hash[k] = hash[k].to_s }