2013-07-17 24 views
5

我在我的哈希以下鍵:如何爲散列中的每個鍵添加前綴?

address, postcode 

我要了「shipping_」前綴添加到每個人,這樣他們就變成:

shipping_address, shipping_postcode 

代替。我怎樣才能做到這一點?

+2

[這個問題](http://stackoverflow.com/問題/ 6210572 /如何替換一個哈希鍵與另一個鍵)和[這個問題](http://stackoverflow.com/questions/4137824/how-to-elegantly-rename-all-如何在哈希中替換密鑰)你出去了。 –

回答

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"} 
+3

而不是'k.dup.prepend(「shipping _」)'讓Ruby使用''shipping _#{k}「'處理'dup.prepend'。更明顯的是發生了什麼事情。 –

+0

@TheTinMan完成!感謝您的評論 –

4

如果你想破壞性做到這一點,這是一個簡短的方式:

hash.keys.each{|k| hash.store("shipping_#{k}", hash.delete(k))}