2016-05-20 16 views
2

にリストのリストからゼロの行を削除します。は私のようなScalaでのリストのリストを持っているのScala

val lst = List(List(60, 0, 1, 2, 3, 28, 0, 0, 0, 0), List(0, 0, 0, 0, 0, 0, 0, 0, 0, 0), List(47, 0, 1, 1, 2, 28, 0, 0, 0, 0)) 

と私はすべてゼロの行を削除すると結果がでなければなりませんように:

List(List(60, 0, 1, 2, 3, 28, 0, 0, 0, 0), List(47, 0, 1, 1, 2, 28, 0, 0, 0, 0)) 

Scalaリストには、これらの行を削除する組み込みメソッドがありますか?

答えて

3

filterを使用すると、述語に一致する項目(リスト)のみを保持できます。述語は、非ゼロ要素をチェックするためにexistsを使用することができます。

lst.filter(_.exists(_ != 0)) 
+0

ありがとうございます。関連するもう1つの質問:-1などの負の値が少なくとも1つある行を削除するにはどうすればよいですか?私はlst.filter(_。exists(_ == -1))を試しましたが、要素の1つとして-1を持つすべての行を返します。 – MTT

+1

"少なくとも1つの負の値"は 'exists(_ <0)'に変換され、それらを_remove_したいので、 'lst.filter(_。forall(_> = 0))'右? –

+0

絶対に正しく!ありがとう。 – MTT

2

@Tzachゾハルの答えは完全に罰金ですが、ここでそれをアプローチする別の方法です。

scala> lst.filterNot(xs => xs.forall(_ == 0)) 
res0: List[List[Int]] = List(
    List(60, 0, 1, 2, 3, 28, 0, 0, 0, 0), 
    List(47, 0, 1, 1, 2, 28, 0, 0, 0, 0) 
) 
関連する問題