Ruby 将哈希键中的空格替换为下划线

Ruby 将哈希键中的空格替换为下划线,ruby,string,hash,gsub,Ruby,String,Hash,Gsub,我有一个散列,其中键有一些空格,如下所示。我想用下划线替换空格。我不知道为什么,但下面的程序不起作用 关键点: “VoLTE QCI1安装失败%” “VoLTE QCI1安装失败” “VoLTE QCI1安装尝试” 预期输出: “电压\u QCI1\u设置\u失败%” “VoLTE_QCI1_设置_故障” “VoLTE_QCI1_设置_尝试” 电流输出: “VoLTE QCI1安装失败%” “VoLTE QCI1安装失败” “VoLTE QCI1安装程序尝试”如果要对整个哈希重新设置密钥,可能必

我有一个散列,其中键有一些空格,如下所示。我想用下划线替换空格。我不知道为什么,但下面的程序不起作用

关键点: “VoLTE QCI1安装失败%” “VoLTE QCI1安装失败” “VoLTE QCI1安装尝试”

预期输出: “电压\u QCI1\u设置\u失败%” “VoLTE_QCI1_设置_故障” “VoLTE_QCI1_设置_尝试”

电流输出: “VoLTE QCI1安装失败%” “VoLTE QCI1安装失败”
“VoLTE QCI1安装程序尝试”

如果要对整个哈希重新设置密钥,可能必须重新生成它:

@@parsed_items = Hash[
 @@parsed_items.map do |key, value|
   [ key.gsub(/\s/,'_'), value ]
 end
]
each_key
方法忽略块返回的任何内容,它只是将其抛出,因此不会对哈希本身进行任何更改

您还可以编写一个帮助器方法来消除任意哈希的下划线,该方法也可以做到这一点


请注意,使用
@
类级变量通常是一种混合关注的迹象。实例方法不应该在类数据中四处窥探,它应该被认为是私有的。如果您确实需要访问它,请公开类级方法,这些方法为您提供了一个干净的接口。

如果您想为整个哈希重新设置密钥,您可能必须重新生成它:

@@parsed_items = Hash[
 @@parsed_items.map do |key, value|
   [ key.gsub(/\s/,'_'), value ]
 end
]
each_key
方法忽略块返回的任何内容,它只是将其抛出,因此不会对哈希本身进行任何更改

您还可以编写一个帮助器方法来消除任意哈希的下划线,该方法也可以做到这一点


请注意,使用
@
类级变量通常是一种混合关注的迹象。实例方法不应该在类数据中四处窥探,它应该被认为是私有的。如果您确实需要访问它,请公开类级方法,这些方法为您提供了一个干净的接口。

每个\u键都返回哈希值。应用代码后,
@@parsed_项
返回什么?{“VoLTE QCI1安装失败%”=>“.239”、“VoLTE QCI1安装失败”=>“15”、“VoLTE QCI1安装尝试”=>“6274”、“QCI5安装失败%”=>“.065”,}
每个_键
返回哈希值。应用代码后,
@@parsed_items
返回什么?{“VoLTE QCI1安装失败%”=>“.239”、“VoLTE QCI1安装失败”=>“15”、“VoLTE QCI1安装尝试”=>“6274”、“QCI5安装失败%”=>“.065”}或
@parsed_items.map{…}。到{h
。谢谢。我按照@tadman的建议重新输入了我的哈希,结果成功了。有趣@muistooshort在Ruby 2.0+中工作,这是真的。默认情况下我真的应该使用它。或者
@@parsed_items.map{…}.to_h
。谢谢。我按照@tadman的建议重新输入了我的哈希,结果成功了。有趣@muistooshort在Ruby 2.0+中工作,这是真的。我真的应该默认使用它。