2013-06-20 6 views
19

私たちは皆知っているように、Array#compactは、配列からnil要素を削除します。には、空の要素に対してArray#compactと同等の機能がありますか?

array.reject { |element| element.empty? }

は(レールであなたも空要素nil要素を取り除くために#blank?を行うことができます)[]のような空の要素を削除します。

Array#compactのような空白の要素を削除するための省略方法がありますか?または、私の最高の賭けArray#rejectを使用していますか?

#compactの「空の」同等物がある場合、私はそれを見ていません。しかし、多分私はそれを見落としているだけかもしれません。

答えて

25

はいあります。

array.reject &:empty? 

scarver2Hoang Leが説明したように、配列がnilが含まれている場合は、これはNoMethodErrorで失敗します。あなたがRailsActive Supportを使用している場合


、あなたは安全に書き込むことができます。

array.reject &:blank? 

すべてのオブジェクトがblank?including nilに応えるため、エラーはありません。

mu is too shortによって示唆されているようにそれを行うための別の方法もあります:

array.select &:present? 

present?blank?の面で実装されているので、両方が適切であると思われます。

+7

私はあなたが 'array.select(&:present?)'をRailsに読み込む方が良いと思います。 –

+0

良い点;なんらかの理由で、私は 'Array#map'を実行しているときに'& 'を使うのが普通です。 – gregates

+1

@muistooshort 'select(&:present?)'で素晴らしいアイデアすべての要素が空白の場合、空の配列を返します。 'reject'メソッドは' nil'を返して、 'join'や' map'のような連続したメソッドが失敗するようにしていました。 – scarver2

関連する問題