当整数列表可以为空时,我也试图找到它的最小值。
scala> val minValue:Int = List() match {
| case Nil => -1
| case xs => xs.min
| }
<console>:9: error: diverging implicit expansion for type Ordering[B]
starting with method Tuple9 in object Ordering
case xs => xs.min
虽然它运行良好,但不是非空列表。
scala> val minValue = List(1,2) match {
| case Nil => -1
| case xs => xs.min
| }
minValue: Int = 1
我如何在没有排序的情况下找到 min 作为我能想到的一种方法是排序并使用 getOrElse defaultValue 进行排序。
最佳答案
问题是类型检查器不知道使用什么类型 List()
.如果您专门使用类型注释空列表,它应该可以正常工作:
val minValue:Int = List.empty[Int] match { // ...
在与@senia 讨论后,我意识到您可能将 -1 用作“黑客”来表示“无最小值”而不是实际值。如果是这种情况,请使用
Option
在 Scala 中输入可能更清楚,因为您可以返回 Some
实际结果的变体和 None
空列表情况下的变体。 Scala 序列实际上已经为您提供了一个很好的方法:scala> List.empty[Int].reduceLeftOption(_ min _)
res0: Option[Int] = None
scala> List(5, 2, 1, 3, 4).reduceLeftOption(_ min _)
res1: Option[Int] = Some(1)
关于scala - 整数列表在scala中可以为空时的最小值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21663235/