gpt4 book ai didi

scala - Scala 中的合并选项

转载 作者:行者123 更新时间:2023-12-04 01:27:47 25 4
gpt4 key购买 nike

大多数SQL实现(这个问题与SQL无关,只是一个例子)提供了函数COALESCE(x1,x2,...,xn)返回 x1如果不是 NULL , x2否则仅当 x2不是 NULL两者都不是等等。如果所有 xi值为 NULL那么结果是 NULL .

我想得到类似 SQL 的 COALESCE在 Scala 中为 Option值是 NULL替换为 None .我给你举几个例子:

> coalesce(None,Some(3),Some(4))
res0: Some(3)

> coalesce(Some(1),None,Some(3),Some(4))
res1: Some(1)

> coalesce(None,None)
res2: None

所以我将其实现为:
def coalesce[T](values: Option[T]*): Option[T] = 
(List[T]() /: values)((prev: List[T], cur: Option[T]) =>
prev:::cur.toList).headOption

它工作正常,但我想知道是否已经存在这样的功能作为 Scala 的一部分实现。

最佳答案

更短的,你可以使用 collectFirst .这将一步完成,最多遍历一次集合。

def coalesce[A](values: Option[A]*): Option[A] =
values collectFirst { case Some(a) => a }


scala> coalesce(Some(1),None,Some(3),Some(4))
res15: Option[Int] = Some(1)

scala> coalesce(None,None)
res16: Option[Nothing] = None

关于scala - Scala 中的合并选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29234056/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com