我有两个包含GPS坐标的列表,我想在这两个列表中找到坐标之间的最短距离。现在,我遍历了列表,并将每个距离存储到另一个列表中,如下所示:
val distanceList = for {
c1 <- cordinatesList1
c2 <- cordinatesList2
distace = calculateDistances(c1, c2)
} yield distance
现在我可以从distanceList
中获得最小值,但是是否可以在for-comprehension
内找到最小值而不存储所有距离?
答案 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))