我想从我的哈希中删除空格,所以如果我有
{"my hash key": 12}
Run Code Online (Sandbox Code Playgroud)
我想得到
{"myhashkey": 12}
Run Code Online (Sandbox Code Playgroud)
我找到了一些方法来剥离这些值,但在键上遇到了问题.当我尝试
my_hash.each_key{|k| k.gsub!(' ', '')}
Run Code Online (Sandbox Code Playgroud)
我收到了错误:
RuntimeError: can't modify frozen String
Run Code Online (Sandbox Code Playgroud)
如果只使用gsub(没有'!')它运行正常,但不起作用.
那么实现这一目标的最佳方法是什么?谢谢!
散列中的键被冻结(如错误消息所示),因此无法在原位修改它们.必须使用新密钥构造新哈希:
{"my hash key" => 12}.map { |k, v| [k.delete(' '), v] }.to_h
#? {"myhashkey"=>12}
Run Code Online (Sandbox Code Playgroud)
NB!有一个陷阱:你可能会失去一些价值!
{"a b c" => 42, "abc" => :foo}.
map { |k, v| [k.delete(' '), v] }.to_h
#? {"abc"=>:foo}
Run Code Online (Sandbox Code Playgroud)
你可以使用transform_keys:
my_hash = { 'my hash key': 12 }
#=> {:"my hash key"=>12}
my_hash.transform_keys { |k| k.to_s.delete(' ').to_sym }
#=> {:myhashkey=>12}
Run Code Online (Sandbox Code Playgroud)
该to_s/ to_sym转换是必要的,因为Symbol没有实现delete.如果您的密钥实际上是字符串,则可以省略它:
my_hash = { 'my hash key' => 12 }
#=> {:"my hash key"=>12}
my_hash.transform_keys { |k| k.delete(' ') }
#=> {:myhashkey=>12}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
216 次 |
| 最近记录: |