gpt4 book ai didi

scala - 如何使用 Option[String] 按字母顺序对案例类进行排序而忽略 None 的?

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

给定一个 List[Foo],其中 Foo 定义为:

case class Foo(bar: Option[String])

按字母顺序查找具有第一个 barFoo 的最佳方法是什么?

例如,如果我有:

val l = List(Foo(None), Foo(Some("xyz")), Foo(Some("abc")))

我想返回 Foo(Some("abc"))

最佳答案

   list.filter(_.bar.isDefined) match {
case Nil => Foo(None)
case l => l.minBy(_.bar)
}

或者,如果总会有至少一个非空选项,那么只需 list.filter(_.bar.isDefined).minBy(_.bar)

这比排序(略微)好,因为它是线性的,不需要分配数据结构。

另一种可能性,甚至(稍微)更有效(但稍微复杂一点)是

list.reduceOption { 
case (Foo(None), x) => x
case (x, Foo(None)) => x
case (Foo(Some(x)), Foo(Some(y))) => if ( x < y ) Foo(Some(x)) else Foo(Some(y))
}

关于scala - 如何使用 Option[String] 按字母顺序对案例类进行排序而忽略 None 的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27572558/

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