我有一个按以下方式定义的数据结构:一个映射数组,其中每个映射都有String键和Doubles数组作为值。即数组[映射[字符串,数组[双精度]]]
这种结构背后的原因是,每个字符串键都是高速公路的标识符,其值代表高速公路上交通传感器的纬度和经度。我有多条高速公路,因此需要多张地图。我现在需要做的是找到整个数据结构中所有传感器的最大和最小纬度(索引0)以及最大和最小经度(索引1)。
我肯定可以用传统的方式通过一系列循环来解决这个问题,但是我想知道在Scala中是否有一些巧妙的方法可以做到这一点(我不是Scala的专家)。最终,这不是一个非常重要的问题,因为我可以使用自己的循环来完成它。只是认为这将是一个有趣的问题,如果有人可以找到一个不错的解决方案,那就值得一试。
编辑:这是数据结构如何工作的更具体的示例。在此,R1S1表示道路#1,传感器#1等。
Array(Map(“ R1S1”-> Array(32,117),“ R1S2”-> Array(33,118)),Map(“ R2S1”-> Array(32,116),“ R2S2”-> Array(34,118)))
如果你可以转换你的数据结构的坐标的一个部分的平面列表,那么你可以打电话min
和max
上。如果您可以从内部开始并找到出路:
Array[Double]
,您想要获得第一个元素(或第二个元素)。从本质上讲,您可以反向执行此操作,从外部开始,仅处理容器,没有for
循环。这是一个完整的示例:
// Say how to order Double values
import Ordering.Double.IeeeOrdering
// Create a dedicated data structure for the coordinates
case class Coordinates(lat: Double, lon: Double)
// Find the minimum latitude value for your data structure
def minLat(world: Seq[Map[String, Seq[Coordinates]]]): Double =
world // Seq[Map[String, Seq[Coordinates]]]
.map { _.values } // Seq[Seq[ Seq[Coordinates]]]
.flatten // Seq[ Seq[Coordinates] ]
.flatten // Seq[ Coordinates ]
.map { _.lat } // Seq[ Double ]
.min
// Let's try it
val aWorld = Seq(Map(("a", Seq(Coordinates(-70, 40)))))
minLat(aWorld) // -70
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句