ash*_*ley 2 scala scala-collections
如果它是零,则尝试删除列表的第一个元素(不是真的,但是出于示例的目的).
给出一个清单:
val ns = List(0, 1, 2)
Run Code Online (Sandbox Code Playgroud)
删除第一个零可以通过将第一个匹配项删除为零来完成:
List(0, 1, 2).dropWhile(_ == 0)
res1: List[Int] = List(1, 2)
Run Code Online (Sandbox Code Playgroud)
或者你可以删除所有不为零的东西.
List(0, 1, 2).filter(_ > 0)
res2: List[Int] = List(1, 2)
Run Code Online (Sandbox Code Playgroud)
这些问题是当列表有多个零时.以前的解决方案不起作用,因为它们删除了太多的零:
List(0, 0, 1, 2, 0).filter(_ > 0)
res3: List[Int] = List(1, 2)
List(0, 0, 1, 2, 0).dropWhile(_ == 0)
res4: List[Int] = List(1, 2, 0)
Run Code Online (Sandbox Code Playgroud)
这有现成的功能吗?
我还认为模式匹配是可读性和性能的最佳选择(我测试过,OP的模式匹配代码实际上比简单更好if ... else ....).
List(0, 0, 1, 2, 0) match {
case 0 :: xs => xs
case xs => xs
}
res10: List[Int] = List(0, 1, 2, 0)
Run Code Online (Sandbox Code Playgroud)
而且,不,没有简单的内置功能.