我的哈希中有以下键:
address, postcode
我想为它们中的每一个添加“shipping_”前缀,这样它们就会变成:
shipping_address, shipping_postcode
反而。我怎样才能做到这一点?
我的哈希中有以下键:
address, postcode
我想为它们中的每一个添加“shipping_”前缀,这样它们就会变成:
shipping_address, shipping_postcode
反而。我怎样才能做到这一点?
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"}
在 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"}
如果你想破坏性地这样做,这是一个简短的方法:
hash.keys.each{|k| hash.store("shipping_#{k}", hash.delete(k))}