Scala:从列表中返回符合条件的元素



我有一个列表,我试图写一个函数returnMatchedElement(x:Int,y:Int,f:(Int,Int)=>Boolean),这样,如果某个条件匹配列表的一个元素,它将返回该元素。以下是我目前得到的:

def returnMatchedElement(x:Int,l:List[Int],f:(Int,Int)=>Boolean):Int={
 for (y<-l if f(x,y)) yield y 
0}
def matchElements(a:Int,b:Int):Boolean= {if a==b true else false} 
val l1=List(1,2,3,4,5)
returnMatchedElement(3,l1,matchElements)
res13: Int = 0 

我猜我在理解yield关键字方面有问题。我说错了什么?

编辑

下面的答案工作(感谢),但只有当f返回布尔值。我尝试了另一个像这样的例子

def matchElements(a:Int,b:Int):Int= {if (a==b) 1 else 0} 
def returnMatchedElement(x:Int,l:List[Int],f:(Int,Int)=>Int):Option[Int]={l.find(y => f(x, y))}

现在编译器说

<console>:8: error: type mismatch;
 found   : Int
 required: Boolean
       def returnMatchedElement(x:Int,l:List[Int],f:(Int,Int)=>Int):Option[Int]={l.find(y => f(x, y))}

简单地使用find,它找到序列的第一个元素满足谓词,如果有的话:

def returnMatchedElement(x: Int, l: List[Int], f: (Int,Int) => Boolean): Option[Int] = {
  l.find(y => f(x, y))
}

相关内容

  • 没有找到相关文章

最新更新