返回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#collect
和Hash#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 }