2016-05-20 95 views
2

删除零行我的目录列表中斯卡拉如:从清单列表中斯卡拉

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)) 

斯卡拉列表是否有任何内置的方法来删除这些行?

回答

3

您可以使用filter仅保留与谓词相匹配的项目(列表)谓词可以使用exists检查非零元素:

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

非常感谢。还有一个相关的问题:如何删除至少有一个负值的行,如-1?我试过lst.filter(_。exists(_ == -1)),但它返回所有具有-1的行作为其中一个元素。 – MTT

+1

“至少有一个负值”会转化为“存在(_ <0)”,并且您希望删除这些值,所以您需要相反的结果:'lst.filter(_。forall(_> = 0))'对? –

+0

绝对正确!谢谢。 – MTT

2

@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) 
)