从Scala中的列表列表中删除零行
我在Scala中有一个列表,例如:从Scala中的列表列表中删除零行,scala,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 l
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 list是否有任何内置方法来删除这些行 您可以使用
过滤器仅保留与谓词匹配的项(列表);谓词可以使用exists
检查非零元素:
lst.filter(_.exists(_ != 0))
@Tzach-Zohar的答案很好,但这里有另一种方法
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)
)
谢谢。还有一个相关问题:如何删除至少有一个负值(如-1)的行?我尝试了lst.filter(.exists(=-1)),但它返回所有行,其中一个元素为-1。“至少有一个负值”将转换为exists(
),您想删除它们,所以需要相反的结果:lst.filter(\u>=0))
,对吗?