小编典典

在 Ruby 中更改哈希中的每个值

all

我想更改哈希中的每个值,以便在值之前和之后添加 ‘%’

{ :a=>'a' , :b=>'b' }

必须改为

{ :a=>'%a%' , :b=>'%b%' }

最好的方法是什么?


阅读 89

收藏
2022-07-08

共1个答案

小编典典

如果您希望实际的字符串本身在适当的位置发生变异(可能并且希望影响对相同字符串对象的其他引用):

# 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}%"] } ]
2022-07-08