2017-10-31 6 views
0

は、ハッシュです:ここハッシュの鍵の空白をすべて削除するには?ここ

hash = {"<start>"=>[["<intro>"]], 
     "<intro> "=>[["<FirstSentence>", "<Funnel>", "<Thesis>"]], 
     "<FirstSentence> "=>[["<StartingClause>", "<Group>", "<PastAction>", "."], ["<Quotation>", "--", "<Author>", "<QuoteEnd>", "<QuoteTransition>", "."]]} 

key[1]key[2]>後に空白を持っています。私はそれを削除したい。私は

hash.each do |key, _| 
    key.delete(' ') 
end 

などtr(' ', '')delete(' ')stripgsubを、試してみました。しかし、彼らは動作しません。空白は、すべてのトリミング/削除メソッドの影響を受けません。この方法を間違った方法で使用していますか?

+0

ハッシュを再構築する必要があります。 'p hash.keys.map(&:strip).zip(hash.values).to_h'です。キーを簡単に再入力できるかどうかは不明です。 –

答えて

1

あなたのコードは本質的に変数keyから空白を削除し、ハッシュ自体は削除していないため、使用しているループは機能しません。 、

def normalize_keys!(hash) 
    buffer = {} 
    hash.each do |key, value| 
    buffer[key.strip] = value 
    end 
    buffer 
end 

new_hash = normalize_keys!(old_hash) 
2
hash.each_with_object({}) { |(k,v),h| h[k.strip] = v } 
    #=> {"<start>"=>[["<intro>"]], 
    # "<intro>"=>[["<FirstSentence>", "<Funnel>", "<Thesis>"]], 
    # "<FirstSentence>"=>[["<StartingClause>", "<Group>", "<PastAction>", "."], 
    #      ["<Quotation>", "--", "<Author>", "<QuoteEnd>", 
    #       "<QuoteTransition>", "."]]} 
3
hash.map { |k, v| [k.strip, v] }.to_h 
0

適用する方法がdelete!です:私はどうなるのか

はこのように、ループロジックをカプセル化し、修正キーで新しいハッシュを返す関数を記述していますないdelete。 String#deleteは受信者を変更しません。ストリング#削除!そうです。

関連する問題