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

时间:2010-04-03 18:45:10

标签: ruby arrays hash

我正在尝试这个:

{: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的各种变体。有什么想法吗?

2 个答案:

答案 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 }