【发布时间】:2013-07-16 01:42:32
【问题描述】:
我的哈希中有以下键:
address, postcode
我想给它们添加“shipping_”前缀,这样它们就会变成:
shipping_address, shipping_postcode
相反。我该怎么做?
【问题讨论】:
-
This question 和 this question 关于如何替换散列中的键可能会对您有所帮助。
标签: ruby
我的哈希中有以下键:
address, postcode
我想给它们添加“shipping_”前缀,这样它们就会变成:
shipping_address, shipping_postcode
相反。我该怎么做?
【问题讨论】:
标签: ruby
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"}
【讨论】:
"shipping_#{k}" 处理 dup.prepend 而不是 k.dup.prepend("shipping_")。发生了什么更明显。
在 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))}
【讨论】: