回答:
これには多くの方法があります。1つは reject
noEmptyCities = cities.reject { |c| c.empty? }
を使用してreject!、そのcities場で変更することもできます。それはどちらかが返されますcities、それは何かを拒否した場合、またはその戻り値としてnil何も拒否が行われていない場合。あなたが注意していなければ、それは問題になるかもしれません(コメントでこれを指摘してくれたninja08に感謝します)。
cities.reject!(&:blank?)?empty?アレイ用
blank?はからのみ利用できますActiveSupport。標準Rubyでは使用しますString#empty?:ruby-doc.org/core-1.9.3/String.html#method-i-empty-3F
rejectリターン、リターンのreject!理由よりも優れています[].reject!(&:empty?)nil[].reject(&:empty?)[]
ここに私のために働くものがあります:
[1, "", 2, "hello", nil].reject(&:blank?)
出力:
[1, 2, "hello"]
:blank?Rails特有のものだと気づくのに苦労したことだった。
NoMethodError: undefined method empty? for nil:NilClass、:blank? より優れているからです:empty?
:blankよりもうまく機能します:empty。そのため:emptyには使用できませんnil
私のプロジェクトでは私が使用しますdelete:
cities.delete("")
このような配列を整理したいときは、次のようにします。
["Kathmandu", "Pokhara", "", "Dharan", "Butwal"] - ["", nil]
これにより、すべての空白またはnil要素が削除されます。
cities.delete_if(&:blank?)
これにより、nil値と空の文字列("")値の両方が削除されます。
例えば:
cities = ["Kathmandu", "Pokhara", "", "Dharan", "Butwal", nil]
cities.delete_if(&:blank?)
# => ["Kathmandu", "Pokhara", "Dharan", "Butwal"]
これを試して:
puts ["Kathmandu", "Pokhara", "", "Dharan", "Butwal"] - [""]
使用reject:
>> cities = ["Kathmandu", "Pokhara", "", "Dharan", "Butwal"].reject{ |e| e.empty? }
=> ["Kathmandu", "Pokhara", "Dharan", "Butwal"]
reject(&:empty?)。
nil.empty?ブームブレイク!
reject(&:empty?)てcompact例えば[nil, ''].compact.reject(&:empty?)
cities.reject! { |c| c.blank? }
blank?over を使用する理由empty?は、空白がnil、空の文字列、および空白を認識するためです。例えば:
cities = ["Kathmandu", "Pokhara", " ", nil, "", "Dharan", "Butwal"].reject { |c| c.blank? }
まだ戻ります:
["Kathmandu", "Pokhara", "Dharan", "Butwal"]
そして、呼び出したempty?上で" "意志のリターンfalseあなたはおそらくになりたいです、true。
注:blank?Railsからのみアクセスできます。Rubyはのみをサポートしていますempty?。
すでに多くの答えがありますが、Railsの世界にいる場合の別のアプローチを次に示します。
cities = ["Kathmandu", "Pokhara", "", "Dharan", "Butwal"].select &:present?
present?から来ていActiveSupportます。これにはRailsタグがなく、1つのメソッドに追加のgemを必要とすることは過度に思われます。
これを達成するためのもう1つのアプローチを次に示します。
我々は使用することができpresenceてselect
cities = ["Kathmandu", "Pokhara", "", "Dharan", nil, "Butwal"]
cities.select(&:presence)
["Kathmandu", "Pokhara", "Dharan", "Butwal"]
" "配列に、rejectメソッドで削除されなかった要素がいくつかありました。削除されたメソッドnil ""または" "アイテム。
別の方法:
> ["a","b","c","","","f","g"].keep_if{|some| some.present?}
=> ["a","b","c","f","g"]
join&で厳格に更新するsplit
cities = ["Kathmandu", "Pokhara", "", "Dharan", "Butwal"]
cities.join(' ').split
結果は次のようになります。
["Kathmandu", "Pokhara", "Dharan", "Butwal"]
注意:これはスペースのある都市では機能しません
cities.reject!(&:empty?)