2016-05-09 17 views
0

私は配列の配列を持っています。これから私は空の配列を排除したい。ruby​​で配列の配列から空の配列を削除する方法は?

iam reject!(&:empty?)メソッドを使用します。予期せぬ結果をもたらしています。

2.2.2 :306 > array = ["yes","yes","yes"] 
=> ["yes", "yes", "yes"] 
2.2.2 :307 > array.split("no") 
=> [["yes", "yes", "yes"]] 
2.2.2 :308 > array.split("no").reject!(&:empty?) 
=> nil 
2.2.2 :309 > array_with_no = ["yes","yes","yes","no"] 
=> ["yes", "yes", "yes", "no"] 
2.2.2 :310 > array_with_no.split("no") 
=> [["yes", "yes", "yes"], []] 
2.2.2 :311 > array.split("no").reject!(&:empty?) 
=> nil 
2.2.2 :312 > array_with_no.split("no").reject!(&:empty?) 
=> [["yes", "yes", "yes"]] 
2.2.2 :313 > 

私は排除する空の配列が存在しない場合、それは代わりにnil

+0

多次元配列が常に必要ですか?結果は1次元配列になりますか? – Thorin

答えて

0

を返すのと同じ配列を返す必要がありますが、rejectの代わりreject!(!の-versionは、配列を変更したい結果をしたいですプレースおよびアレイへの変更がなされまたはされなかった場合に応じtrue又はnilを返す)

Documentation on what the methods do

0

単次元で結果が必要な場合は、簡単に使用できます。

[["yes", "yes", "yes"], []].flatten.compact 
0

selectを使用します。

array.split("no").select(&:present?) 


=> [["yes", "yes", "yes"]] 

また、あなたの拒否からバングを削除することもできますが、それはまたあなたが望むものを与えるでしょう。

array.split("no").reject(&:empty?) 

=> [["yes", "yes", "yes"]] 

!拒絶に!配列を破壊的に修正し、変更がなければnilを返します。

関連する問題