我正在尝试帮助scala中的递归方法从列表中删除特定数字并返回没有给定数字的列表。 我只能使用if / else语句和配对(::)
到目前为止,我有这个,但我不知道如何从scala列表中删除项目。
def removeNum(lst: List[Int]): lst2:List[Int] = lst match {
var lst2:Int
case Nil =>0
case h::t=>{
if(h !=0)
lst2(h)// how do I iterate thru the list without using foreach?
}
else {
removeNum(rest)
}
}
我正在寻找更好的方法来解决这个问题。
答案 0 :(得分:4)
基本方法是将“给定数字”与列表首部进行比较。如果匹配,则仅在列表的其余部分返回递归结果。否则,返回通过保留列表的头部并在列表的其余部分上递归而创建的列表。请注意,更容易考虑是否保持列表的头部而不是从列表中考虑删除元素。
请注意,这需要第二个参数:您要删除的“给定数字”。
答案 1 :(得分:-3)
虽然我认为您应该使用过滤器,但您可以使用:
def removeNum(xs: List[Int], toRemove: Int): List[Int] = xs match {
case x :: xss => if (x == toRemove)
removeNum(xss, toRemove)
else
x :: removeNum(xss, toRemove)
case List() => List()
}