我想更改哈希中的每个值,以便在值之前和之后添加 ‘%’
{ :a=>'a' , :b=>'b' }
必须改为
{ :a=>'%a%' , :b=>'%b%' }
最好的方法是什么?
如果您希望实际的字符串本身在适当的位置发生变异(可能并且希望影响对相同字符串对象的其他引用):
# Two ways to achieve the same result (any Ruby version) my_hash.each{ |_,str| str.gsub! /^|$/, '%' } my_hash.each{ |_,str| str.replace "%#{str}%" }
如果您希望哈希更改到位,但您不想影响字符串(您希望它获取新字符串):
# Two ways to achieve the same result (any Ruby version) my_hash.each{ |key,str| my_hash[key] = "%#{str}%" } my_hash.inject(my_hash){ |h,(k,str)| h[k]="%#{str}%"; h }
如果你想要一个新的哈希:
# Ruby 1.8.6+ new_hash = Hash[*my_hash.map{|k,str| [k,"%#{str}%"] }.flatten] # Ruby 1.8.7+ new_hash = Hash[my_hash.map{|k,str| [k,"%#{str}%"] } ]