我有一个递归方法,其中删除它应该来自给定列表的所有零。
def removeZ(list:List[Int], n:Int):List[Int] = list match {
case Nil => Nil
case h::t=>
if (h == n)
t
else
h :: removeZ(t,n)
}
这会从列表中删除一个零,但如果列表有多个零,则不会。我尝试添加另一个if else语句,它不起作用,如:
if else(t==n)
removeZ(t,n)
如何删除所有零?
答案 0 :(得分:7)
那是因为在第一个0之后你返回尾巴,你必须继续迭代:
scala> def removeZ(list: List[Int], n: Int): List[Int] = list match {
| case Nil => Nil
| case h :: t =>
| if (h == n)
| removeZ(t, n) // 0 found, skip it and iterate the tail
| else
| h :: removeZ(t, n)
| }
removeZ: (list: List[Int], n: Int)List[Int]
scala> removeZ(List(1,0,2,0,3), 0)
res0: List[Int] = List(1, 2, 3)