Scala:从匹配条件

时间:2015-08-18 21:13:53

标签: list scala yield-keyword

我有一个列表,我正在尝试编写一个函数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))}

1 个答案:

答案 0 :(得分:5)

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

li {
    border-left: 1px solid;
    border-top: 0px;
    border-right: 1px solid;
    border-bottom: 0px;
    border-style: solid;
    border-color: #545454;
}
a {
    color: #FFFFFF !important;
}
small {
    color: #C5C6C1;
    font-style: italic;
}