开发者

Return hash with modified values in Ruby

I'm trying this:

{:id => 5, :foos => [1,2,3]}.each {|k,v| v.to_s}

But that's returning this:

{:id=>5, :foos=>[1, 2, 3]}

I'd like to see this:

{:id=>"5", :foos=>"[1, 2, 3]"}

I've also tried variat开发者_StackOverflowions of Hash#collect and Hash#map. Any ideas?


you could use Object#inspect:

{ :id => 5, :foos => [1, 2, 3] }.inject({}) do |hash, (key, value)|
  hash.merge key => value.inspect
end

which returns:

{ :foos => "[1, 2, 3]", :id => "5" }

or if you want it to be destructive:

hash = { :id => 5, :foos => [1, 2, 3] }
hash.each_key { |key| hash[key] = hash[key].inspect }


Your stuff doesn't work because v.to_s doesn't modify v, so essentially the block doesn't do anything.

You could do it like this:

hash = {:id => 5, :foos => [1,2,3]}
hash.each_key { |k| hash[k] = hash[k].to_s }

If you don't want to modify the hash:

hash = {:id => 5, :foos => [1,2,3]}
new_hash = {}
hash.each_key { |k| new_hash[k] = hash[k].to_s }    
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜