2011-02-07 5 views
1

私は配列の配列を持っていますので、空白を取り除いた後に空または空の要素を持つすべての項目を削除したいと思います。このスニペットを見てください:空の空の配列の配列からすべての項目を削除する

x = Array.new 
x << ["A","B", " ", "D"] 
x << [""," ", nil, ""] 
x << ["E","Q", "F", "M"] 

実際のデータが含まれていないため、2番目のレコードを削除します。

これを行うにはどうすればよいでしょうか?私は単純に配列全体を反復し、if-else条件をテストして書くべきでしょうか?

答えて

13

平野ルビーを使用している場合は、レールを使用している場合、あなたは

x.reject{ |arr| arr.all? {|elem| elem.nil? || elem.strip.empty? }} 

を行うことができ、ヘルパーメソッドのおかげで、あなたは、キーの方法がrejectblank?

+0

をちょうどあなたが拒否使用できることに注意してください!新しい配列を作成するのではなく、配列を編集したい場合は、!(with!) – Luis

4
x.reject { |a| a.join.strip.length == 0 } 
ある

x.reject{ |arr| arr.all?(&:blank?) } 

を行うことができます

0

最初の配列にnilが含まれる場合、Chubasバリアントが機能しない場合。 がわずかにそれを修正することができます:

(レールを使用して)

x.compact.reject{ |arr| arr.all?(&:blank?) } 
関連する問題