gpt4 book ai didi

scala - 选项 [T] 的最小/最大可能为空序列?

转载 作者:行者123 更新时间:2023-12-03 05:53:55 24 4
gpt4 key购买 nike

我正在做一些 Scala 体操,其中我有 Seq[T] ,我试图在其中找到“最小”元素。这就是我现在所做的:

val leastOrNone = seq.reduceOption { (best, current) =>
if (current.something < best.something) current
else best
}

它工作得很好,但我不太满意 - 对于这么简单的事情来说有点长,并且 I don't care much for "if"s 。使用 minBy 会更加优雅:

val least = seq.minBy(_.something)

...但是当序列为空时,minminBy 会抛出异常。是否有一种惯用的、更优雅的方法来查找可能为空的列表中的最小元素作为Option

最佳答案

seq.reduceOption(_ min _)

你想要什么吗?

<小时/>

编辑:这是一个包含您的 _.something 的示例:

case class Foo(a: Int, b: Int)
val seq = Seq(Foo(1,1),Foo(2,0),Foo(0,3))
val ord = Ordering.by((_: Foo).b)
seq.reduceOption(ord.min) //Option[Foo] = Some(Foo(2,0))

或者,作为通用方法:

def minOptionBy[A, B: Ordering](seq: Seq[A])(f: A => B) = 
seq reduceOption Ordering.by(f).min

您可以使用 minOptionBy(seq)(_.something)

调用它

关于scala - 选项 [T] 的最小/最大可能为空序列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10922237/

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