Scala 减少点 class

Scala reduce on Point class

我无法通过一次reduce操作得到Pointclass来搜索x坐标最大值(以下我使用map然后reduce)

case class Point(x : Double, y : Double)
val pts = List(Point(1,3), Point(-3,2), Point(5,3))

pts.map(p => p.x).reduce( _ max _ )

这将 return

res22: Double = 5.0

如何使用单个reduce操作得到x的最大值?我尝试了以下方法,但没有得到我期望的结果。

pts.reduce( _.x max _.x )
<console>:11: error: type mismatch;
 found   : Double
 required: Point

您可以使用 foldLeft 获得双倍:

pts.foldLeft(Double.MinValue)(_ max _.x)

或者你可以使用 reduce 来传递一个 Point 然后把它的 x 拉出来:

pts.reduce((a, b) => if (a.x > b.x) a else b).x

使用 reducemax

pts.map(_.x).reduce( (a,v) => a max v)

List[Point] 中找到最大值的其他方法包括

pts.map(_.x).max

这些都太复杂了。使用标准库函数来精确执行此处所需的操作:

 pts.maxBy(_.x).x   //> res0: Double = 5.0

或者,如果示例只是一个玩具,实际用例更复杂,您可以使用 aggregate

pts.aggregate(Double.MinValue)( _ max _.x , _ max _)