6

我的哈希中有以下键:

address, postcode

我想为它们中的每一个添加“shipping_”前缀,这样它们就会变成:

shipping_address, shipping_postcode

反而。我怎样才能做到这一点?

4

3 回答 3

9
hsh1 = {'address' => "foo", 'postcode' => "bar"}
hsh2 = Hash[hsh1.map{|k,v| [k.dup.prepend("shipping_"),v]}]
p hsh2
# >> {"shipping_address"=>"foo", "shipping_postcode"=>"bar"}

更新

hsh1 = {'address' => "foo", 'postcode' => "bar"}
hsh2 = Hash[hsh1.map{|k,v| ["shipping_#{k}",v]}]
p hsh2
# >> {"shipping_address"=>"foo", "shipping_postcode"=>"bar"}
于 2013-07-17T13:44:40.183 回答
6

在 Ruby >= 2.5 中,你可以这样做

hsh.transform_keys! {|k| 'shipping_' + k }
# => {"shipping_address"=>"foo", "shipping_postcode"=>"bar"} 

如果你想变得花哨

hsh.transform_keys! &'shipping_'.method(:+)
# => {"shipping_address"=>"foo", "shipping_postcode"=>"bar"} 
于 2018-09-26T08:31:13.667 回答
4

如果你想破坏性地这样做,这是一个简短的方法:

hash.keys.each{|k| hash.store("shipping_#{k}", hash.delete(k))}
于 2013-07-17T14:35:07.707 回答