在作为地图值的一系列数组中的特定索引的值中找到最大值(和最小值)

我有一个按以下方式定义的数据结构:一个映射数组,其中每个映射都有String键和Doubles数组作为值。即Array [Map [String,Array [Double]]]

此结构背后的原因是,每个String键都是高速公路的标识符,其值代表高速公路上交通传感器的纬度和经度。我有多条高速公路,因此需要多张地图。我现在需要做的是找到整个数据结构中所有传感器的最大和最小纬度(索引0)以及最大和最小经度(索引1)。

我绝对可以用传统的方式通过一系列循环来解决这个问题,但是我想知道在Scala中是否有一些巧妙的方法可以做到这一点(我不是Scala的专家)。最终,这不是一个非常重要的问题,因为我可以使用自己的循环来完成它。只是认为这将是一个有趣的问题,如果有人可以找到一个不错的解决方案,那将是值得寻找的。​​ p>

编辑:这是数据结构如何工作的更具体示例。在这里,R1S1表示1号道路,1号传感器等。

Array(Map(“ R1S1”-> Array(32,117),“ R1S2”-> Array(33,118)),       Map(“ R2S1”-> Array(32,116),“ R2S2”-> Array(34,118)))

Jocelynsun 回答:在作为地图值的一系列数组中的特定索引的值中找到最大值(和最小值)

如果仅将数据结构转换为坐标的一部分的平面列表,则可以在其上调用minmax。如果您可以从内部开始并找到出路:

  1. 鉴于最里面的Array[Double],您想要获得第一个(或第二个)元素。
  2. 给出包含的地图,您只想获取值。
  3. 给出包含的数组,将数组的数组展平为单个数组。
  4. 充分利用结果。

从本质上讲,您可以反向执行此操作,即从外部开始,仅处理容器,没有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
本文链接:https://www.f2er.com/3132000.html

大家都在问