Ruby-更新哈希键以去除空白

Ruby-更新哈希键以去除空白,ruby,Ruby,我想从我的散列中去掉空白,所以如果我有 {"my hash key": 12} 我想去 {"myhashkey": 12} 我找到了一些从值中剥离的方法,但在键上这样做有一个问题。当我试着 my_hash.each_key{|k| k.gsub!(' ', '')} 我得到了一个错误: RuntimeError: can't modify frozen String 如果只使用gsub(不使用“!”),它运行良好,但不起作用 那么,实现这一目标的最佳方式是什么?谢谢 散列中的键被冻结(

我想从我的散列中去掉空白,所以如果我有

{"my hash key": 12}
我想去

{"myhashkey": 12}
我找到了一些从值中剥离的方法,但在键上这样做有一个问题。当我试着

 my_hash.each_key{|k| k.gsub!(' ', '')}
我得到了一个错误:

RuntimeError: can't modify frozen String
如果只使用gsub(不使用“!”),它运行良好,但不起作用


那么,实现这一目标的最佳方式是什么?谢谢

散列中的键被冻结(正如错误消息所说,),因此它们不能就地修改。必须使用新密钥构造新哈希:

{"my hash key" => 12}.map { |k, v| [k.delete(' '), v] }.to_h
#⇒ {"myhashkey"=>12}
NB有一个陷阱:你可能会失去一些价值

{"a b c" => 42, "abc" => :foo}.
  map { |k, v| [k.delete(' '), v] }.to_h
#⇒ {"abc"=>:foo}
您可以使用:

由于
符号
未实现
删除
,因此需要将
转换为
。如果键实际上是字符串,则可以忽略它:

my_hash = { 'my hash key' => 12 }
#=> {:"my hash key"=>12}

my_hash.transform_keys { |k| k.delete(' ') }
#=> {:myhashkey=>12}
请尝试以下操作:

h = { "my hash key": 12 }
h.map {|key, value| [key.to_s.delete(' '), value] }.to_h
基本上,将散列映射到一个新数组,在该数组中去掉所有空格(这就是
键.to_.s.delete(“”)
的作用),然后使用
.to_h
将其转换回散列:

编辑

刚才看到了@stephen的答案,它使用了
转换键
,这是Ruby 2.5中引入的一种更简单的方法


不过,我还是要保留我的答案,如果有人使用以前版本的Ruby时偶然发现这一点

请向我们展示您尝试更新哈希键的代码。@AaronChristiansen更新了问题,谢谢!非常感谢。我会尽快接受答案的谢谢你的警告!但就我而言,那是不会发生的。我想知道你是否会改变你的化身。我不记得那灰白的头发了。天哪+1至@CarySwoveland@CarySwoveland千载难逢;-)太好了,这应该是可以接受的答案。
h = { "my hash key": 12 }
h.map {|key, value| [key.to_s.delete(' '), value] }.to_h