回答:
これには多くの方法があります。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?)