如何通过一组新的给定键更改哈希的所有键

JCL*_*CLL 47 ruby hash

如何通过一组新的给定键更改哈希的所有键?

有没有办法优雅地做到这一点?

Jör*_*tag 77

假设你有一个Hash将旧键映射到新键,你可以做类似的事情

hsh.map {|k, v| [key_map[k], v] }.to_h
Run Code Online (Sandbox Code Playgroud)

  • 你是男人!你的哈希非常棒!再次感谢这个宝石!:) (4认同)

San*_*osh 10

Ruby 2.5具有Hash#transform_keys!方法。使用按键映射的示例

h = {a: 1, b: 2, c: 3}
key_map = {a: 'A', b: 'B', c: 'C'}

h.transform_keys! {|k| key_map[k]}
# => {"A"=>1, "B"=>2, "C"=>3} 
Run Code Online (Sandbox Code Playgroud)

您还可以将symbol#toproc快捷方式与transform_keys配合使用,例如:

h.transform_keys! &:upcase
# => {"A"=>1, "B"=>2, "C"=>3}
Run Code Online (Sandbox Code Playgroud)