Scala 减少点 class
Scala reduce on Point class
我无法通过一次reduce
操作得到Point
class来搜索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
使用 reduce
和 max
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 _)
我无法通过一次reduce
操作得到Point
class来搜索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
使用 reduce
和 max
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 _)