当您对列表[(字符串,整数)]应用过滤器时,过滤器函数需要什么签名



这不会编译

object TestFilter extends App {
  val a = List(("orange",0), ("peach",1), ("apple",2), ("banana",3))
  filter( (i:String,j:Int) => j % 2  == 0)
}

我收到以下错误:

Error:(6, 30) type mismatch;
 found   : (String, Int) => Boolean
 required: ((String, Int)) => Boolean

我做错了什么?

您的列表类型为 List[(String, Int)](String, Int)的类型是一对(Tuple2)。此对是过滤器函数中的参数。

您可以通过两种方式编写它。第一种方式是这样的:

list.filter(pair => pair._2 % 2 == 0)

您还可以对货币对使用模式匹配。这将使您更接近您想要的:

list.filter { case (i, j) => j % 2 == 0 }

预期的类型是 Tuple2[String, Int] Tuple2。为了完成对第二个参数的过滤,您有 2 个选项: val a = List(("orange",0), ("peach",1), ("apple",2), ("banana",3)) a.filter{case (i,j) => j % 2 == 0}

val a = List(("orange",0), ("peach",1), ("apple",2), ("banana",3)) a.filter(_._2 % 2 == 0)

a 是 Tuple2 的列表:

val a = List(("orange",0), ("peach",1), ("apple",2), ("banana",3))
a.filter(t => t._2 % 2 == 0)

最新更新