2016-12-20 31 views
0

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

键: “的VoLTE QCI1安装失败%” “的VoLTE QCI1建立失败” “的VoLTE QCI1安装尝试”

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

预期输出: “VoLTE_QCI1_Setup_Failure%” “VoLTE_QCI1_Setup_Failures” “VoLTE_QCI1_Setup_Attempts”

当前输出: “VoLTE的QCI1安装失败%” 应对“VoLTE QCI1安装失败” 应对“VoLTE QCI1尝试建立”

+0

'each_key'返回散列。在应用您的代码后,@@ parsed_items'返回什么? –

+0

{ “的VoLTE QCI1安装失败%”=>” 0.239" , “VoLTE的QCI1建立失败”=> “15”, “VoLTE的QCI1安装尝试”=> “6274”, “QCI5安装失败%” =>“.065”, } – ssharma

回答

3

如果你想重新输入你的整个哈希,你可能必须重建它:

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

each_key方法忽略你的块返回,它只是抛出它,所以没有改变散列本身。

你也可以编写一个帮助器方法来去掉下划线的任意散列。

请注意,使用@@类级变量通常是混合关注的标志。实例方法不应该在类数据中徘徊,它应该被认为是私有的。如果您确实需要访问它,请提供给您一个干净的界面的类级方法。

+1

或'@@ parsed_items.map {...} .to_h'。 –

+0

谢谢。我重新键入@tadman建议的哈希值,并且它工作正常。有趣! – ssharma

+0

@ muistooshort这适用于Ruby 2.0+,这是真的。我真的应该默认使用它。 – tadman