簡體   English   中英

在列表[(String,Int)]上應用過濾器時,過濾器功能需要什么簽名?

[英]What signature is expected for the filter function when you apply filter on a List[(String,Int)]?

這不會編譯

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

我究竟做錯了什么 ?

預期的類型為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)

您的列表的類型為List[(String, Int)] 類型(String, Int)是一個對( Tuple2 )。 這對是filter-function中的參數。

您可以用兩種方式編寫它。 第一種方法是這樣的:

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

您還可以在該對上使用模式匹配。 這將使您更接近所需的內容:

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

a是Tuple2的列表:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM