尝试在Scala中编写通用过滤器功能

时间:2018-09-20 16:10:35

标签: scala

我写的代码在下面提到

def genericFilter[A,B](f:(A) => B, list:Seq[A]):Seq[B] = {  
  for { x <- list ; if(f(x)!=false) } yield f(x)  
}

我正在尝试编写过滤器函数,但是该函数的输出始终会产生一个类似的序列

Seq[Boolean] = List(true, true)

我无法打印列表的值

2 个答案:

答案 0 :(得分:3)

更多功能: 您可以使用foldRight遍历列表并根据条件进行过滤。

val l = List.tabulate(10)(_ + 1)
def filter[T](l: List[T])(op: T => Boolean): List[T] = {
  l.foldRight(List[T]())((b, a) => if(op(b)) b :: a else a)
}
filter(l)(_ > 3)

答案 1 :(得分:1)

尝试以下操作:

    def genericFilter[A](f:(A) => Boolean, list:Seq[A]):Seq[A] = {
    for { x <- list ; if(f(x)) } yield x
  }

println(genericFilter((x:Int)=>x%2==0, Seq(1,2,3,4)))

它将打印包含满足功能f的元素的列表。