2013-07-17 4 views
5

Ich habe die folgenden Schlüssel in meinem hash:Wie füge ich jedem Schlüssel in einem Hash ein Präfix hinzu?

address, postcode 

Ich möchte die "shipping_" Präfix zu jedem von ihnen hinzufügen, damit sie werden würde:

shipping_address, shipping_postcode 

statt. Wie kann ich das machen?

+2

[Diese Frage] (http://stackoverflow.com/ Fragen/6210572/how-to-Replace-a-Hash-Schlüssel-mit-einem anderen-Schlüssel) und [diese Frage] (http://stackoverflow.com/questions/4137824/how-to-elegantly-rename-all- keys-in-a-hash-in-ruby) zum Ersetzen der Schlüssel in einer Hash-Datei Ich sag dir Bescheid. –

Antwort

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

Update

hsh1 = {'address' => "foo", 'postcode' => "bar"} 
hsh2 = Hash[hsh1.map{|k,v| ["shipping_#{k}",v]}] 
p hsh2 
# >> {"shipping_address"=>"foo", "shipping_postcode"=>"bar"} 
+3

Anstelle von 'k.dup.prepend (" shipping _ ")" lasse Ruby den 'dup.prepend' mit' 'shipping _ # {k}" 'behandeln. Es ist offensichtlicher, was vor sich geht. –

+0

@theTinMan Fertig! Vielen Dank für Ihre Bewertung –

4

Wenn Sie es destruktiv tun wollen, dann ist dies ein kurzer Weg:

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