Scala Collection对多个项目进行过滤

Saq*_*Ali 3 recursion functional-programming scala tail-recursion scala-collections

我具有以下递归函数,用于从另一个列表(pets:List [String])中包含的列表(zooResidents:List [(String,Int)])中删除项目。它可以工作,但是非常慢。什么是斯卡拉这样的方式?

val pets = List("cat", "dog")

val zooResidents = List(("cat", 4), ("lion", 2), ("tiger", 3), ("dog", 2) 

def removePets(zooResidents: List[(String, Int)], pets: List[String]): List[(String, Int)] =  {
  if (pets.isEmpty) zooResidents
  else removePets(zooResidents.filterNot(_._1.contains(pets.head)), pets.tail)
}

removePets(zooResidents, pets)      //> res2: List[(String, Int)] = List((lion,2), (tiger,3))
Run Code Online (Sandbox Code Playgroud)