找出内心的最低要求?

时间:2019-02-09 09:18:07

标签: scala

我有两个包含GPS坐标的列表,我想在这两个列表中找到坐标之间的最短距离。现在,我遍历了列表,并将每个距离存储到另一个列表中,如下所示:

val distanceList = for {
        c1 <- cordinatesList1
        c2 <- cordinatesList2
        distace = calculateDistances(c1, c2)

    } yield distance

现在我可以从distanceList中获得最小值,但是是否可以在for-comprehension内找到最小值而不存储所有距离?

2 个答案:

答案 0 :(得分:5)

不能在for内部完成,但是可以在外部完成,如果懒惰地进行评估,则不会保存中间结果。

(for {
  c1 <- cordinatesList1.toStream
  c2 <- cordinatesList2
} yield calculateDistances(c1,c2)).min

答案 1 :(得分:0)

需要理解吗?

您可以使用foldLeft轻松做到这一点

val zipped = cordinatesList1.zip(cordinatesList2)
val minPossibleDistance = 0 //Assuming 0


zipped.foldLeft(minPossibleDistance) ((acc, elem) => if (acc < calculateDistances(elem._1, elem._2)) acc else calculateDistances(elem._1, elem._2))