Ruby on Rails 3.2.13を使用していて、対応するハッシュ値が空白のハッシュキーを削除したい。つまり、次の場合ハッシュ
{ :a => 0, :b => 1, :c => true, :d => "", :e => " ", :f => nil }
その場合、結果のハッシュは次のようになります(注:0
およびtrue
は空白とは見なされません)
{ :a => 0, :b => 1, :c => true }
どうすればそれを作ることができますか?
Railsを使用している場合は、試すことができます
hash.delete_if { |key, value| value.blank? }
またはRubyだけの場合
hash.delete_if { |key, value| value.to_s.strip == '' }
この一般的なタスクを実行する方法はいくつかあります
これは、条件付きをサポートするのに十分短く、クリーンで、柔軟性があり、元のオブジェクトを変更しないため、ハッシュのクリーンアップに最も頻繁に使用するものです。 )。これが 良い記事 Rubyの不変性の利点についてです。
hash.reject {|_,v| v.blank?}
注:上記の例のアンダースコアは、procに渡されたタプルを解凍することを示すために使用されていますが、最初の値(キー)は使用していません。
ただし、元のオブジェクトを変更する場合は、次のようにします。
hash.reject! {|_,v| v.blank?}
逆に、評価時にtrueを返す値のみを返すselectを使用します
hash.select {|_,v| v.present? }
...そして変異バージョン
hash.select {|_,v| v.present? }
最後に、onlyがnil
値を持つキーを削除する必要がある場合。 。
hash.compact
これでパターンを取得しましたが、これは元のハッシュを変更するバージョンです。
hash.compact!
Techvineetのソリューションに関して、value == []の場合は次の点に注意してください。
[].blank? => true
[].to_s.strip == '' => false
[].to_s.strip.empty? => false