【问题标题】:How do I add a prefix to each key in a hash?如何为哈希中的每个键添加前缀?
【发布时间】:2013-07-16 01:42:32
【问题描述】:

我的哈希中有以下键:

address, postcode

我想给它们添加“shipping_”前缀,这样它们就会变成:

shipping_address, shipping_postcode

相反。我该怎么做?

【问题讨论】:

标签: ruby


【解决方案1】:
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 使用 "shipping_#{k}" 处理 dup.prepend 而不是 k.dup.prepend("shipping_")。发生了什么更明显。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    如果你想破坏性地这样做,这是一个捷径:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-03-07
      • 1970-01-01
      • 2013-10-25
      • 2020-05-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多