加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

在Scala列表中查找元素,并且还知道哪个谓词已经被满足

发布时间:2020-12-16 19:07:33 所属栏目:安全 来源:网络整理
导读:我在 scala中有以下问题.我必须找到列表中的第一个元素,它满足在OR中有两个条件的谓词函数.问题是我想得到这个元素,但也知道这两个条件中的哪一个已经满足了.这是一个简单的例子: val l1 = List("A","B","AA","BB")val l2 = List("AA","BB","A","B")def c1(
我在 scala中有以下问题.我必须找到列表中的第一个元素,它满足在OR中有两个条件的谓词函数.问题是我想得到这个元素,但也知道这两个条件中的哪一个已经满足了.这是一个简单的例子:

val l1 = List("A","B","AA","BB")
val l2 = List("AA","BB","A","B")

def c1(s: String) = s.startsWith("B")
def c2(s: String) = s.length == 2

println(l1.find(s => c1(s) || c2(s)))
println(l2.find(s => c1(s) || c2(s)))

结果是:

Some(B)
Some(AA)

对于l1的情况,我想要一些返回值(例如一个String),表示满足c1(c2为l2的情况).
一个可能的解决方案可能是在测试之前定义一个var并将其设置在c1和c2函数中,但是我想要找到一个更“功能性样式”的解决方案,也许是返回一个元组的东西:(元素找到,条件满足).

先谢谢您的帮助

解决方法

我会这样做:

Scala 2.8:

def find2p[T](l: List[T],p1: T => Boolean,p2: T => Boolean) = 
  l.view.map(el => (el,p1(el),p2(el))).find(t => t._2 || t._3)

Scala 2.7:

def find2p[T](l: List[T],p2: T => Boolean) = 
  l.projection.map(el => (el,p2(el))).find(t => t._2 || t._3)

视图/投影确保映射将按需进行,而不是应用于整个列表.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读