如何在Ruby中更改散列中的每个值?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (11)

我想改变散列中的每个值,以便在值的前后添加'%'

{ :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}%"] } ]
用户回答回答于

在Ruby2.1及更高版本中,可以做到

{ a: 'a', b: 'b' }.map { |k, str| [k, "%#{str}%"] }.to_h

扫码关注云+社区