2016-09-12 8 views
0

現在、ハッシュのすべての文字列値を小文字に調整しようとしています。このハッシュには複数の値の型(nil、string、integer)が含まれているため、ハッシュ内のnil値のためにdowncaseでハッシュ全体を実行するとエラーが発生します。Ruby - nil値も含むハッシュの文字列値をダウンケース

NoMethodError: undefined method "downcase!" for nil:NilClass 

私は、Rubyの新しいきれいなブランドだと私は最高のは、このハッシュを介して実行し、ゼロまたは整数値をスキップするかどうかはわかりませんでした。私は.mapを使用してすべての値を文字列に変換してから値をダウンケースしようとしましたが、最終結果に差異がないか、エラーが表示されます。

testHash = testHash.map(&:to_s) 
testHash.map(&:downcase!) 
(I've also attempted testHash.each {|k,v| v.downcase!} 

Rubyでこれを正しく記述する方法がわかりません。追加情報が必要な場合はお知らせください、ありがとうございます。

答えて

2

チェック値は、これは動作します

testHash.each { |k, v| v.downcase! if v.is_a?(String) } 
+0

これを実行したところ、エラーは発生しません。しかし、私が知っている値の一つを呼び出す際に大文字があると、それでも大文字になっています。なぜそれが実際に調整されていないのか?ダウンケースの終わりに? – Laura

+4

あなたは 'v.downcase! if v.respond_to?(:downcase!) 'これはややダックタイプです。時には、何かが*できるものではなく*行うことができることを求めることが時々あります。 – meagar

+0

Laura、これはうまくいくはずです。あなたの質問を編集して、これがうまくいかない場合のハッシュ例を表示できますか?この例では、ほんのわずかなキー、おそらく2つまたは3つを含んでいます。 –

1
h = {a: nil, b: "Someword", c: 1} 
h.map {|k,v| v.downcase! if v.is_a? String} 
puts h #=> {:a=>nil, :b=>"someword", :c=>1} 

をdowncasing前に、有効な文字列である場合。私はハッシュを介してマッピングしており、文字列である値をチェックしてからdowncase!メソッドを実行しています。

関連する問題