2016-12-20 9 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

ありがとうございます。私は@タンドマンのように私のハッシュを再提示し、それはうまくいった。面白い! – ssharma

+0

@muistooshortこれはRuby 2.0+で動作しますが、それは本当です。私は本当にデフォルトでそれを使用する必要があります。 – tadman

関連する問題