返回Ruby中带有修改值的哈希值

我正在尝试这个:

{: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#collectHash#map变种。 有任何想法吗?

你可以使用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 } 

你的东西不起作用,因为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 }