在哈希键中用下划线替换 space

replace space with underscore in Keys for a Hash

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

按键: "VoLTE QCI1 Setup Failure%" "VoLTE QCI1 Setup Failures" "VoLTE QCI1 Setup Attempts"

@@parsed_items.each_key {|key|
key.gsub(/\s/,'_')
ap key
    }

预期输出: "VoLTE_QCI1_Setup_Failure%" "VoLTE_QCI1_Setup_Failures" "VoLTE_QCI1_Setup_Attempts"

当前输出: "VoLTE QCI1 Setup Failure%" "VoLTE QCI1 Setup Failures" "VoLTE QCI1 Setup Attempts"

如果您想重新键入整个哈希,您可能需要重建它:

@@parsed_items = Hash[
 @@parsed_items.map do |key, value|
   [ key.gsub(/\s/,'_'), value ]
 end
]

each_key 方法会忽略您的块 returns,它只是将其丢弃,因此不会对哈希本身进行任何更改。

您还可以编写一个辅助方法来去除任意散列的下划线,同样可以做到这一点。

请注意,使用 @@ class 级变量通常是混合关注的标志。实例方法不应该在 class 数据中四处寻找,它应该被认为是私有的。如果您确实需要访问它,请公开 class 级别的方法,为您提供干净的界面。