【发布时间】:2019-05-12 16:23:43
【问题描述】:
我有一个数组
val bins = Array(0,100, 250, 500, 1000, 2000, 3000)
这是我的一段代码:
private var cumulativeDelay:Map[String ,Double] = linkIds.zip(freeFlowDelay).groupBy(_._1).mapValues(l => l.map(_._2).sum)
private var cumulativeCapacity:Map[String , Double] = linkIds.zip(linkCapacity).groupBy(_._1).mapValues(l => l.map(_._2).sum)
cumulativeCapacity foreach {
case(linkId , capacity) => {
val rangeToValue = bins.zip(bins.tail)
.collectFirst { case (left, right) if capacity >= left && capacity <= right =>
Map(s"$left-$right" -> cumulativeDelay.get(linkId))
}
.getOrElse(Map.empty[String, Double])
}
}
所以rangeToValue 的值就像 Map(1000-2000 -> Some(625)) 但我想要 rangeToValue:Map[String,Double] = (1000-2000 -> 625)
【问题讨论】:
-
您可以将数组分成两部分:第一个包含小于 x 的值,第二个包含大于 x 的值并从那里开始工作。
标签: scala dictionary scala-collections