Как получить предел ограничения для конкретного значения из массива в Scala? - PullRequest
0 голосов
/ 11 декабря 2018

У меня есть массив

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)

1 Ответ

0 голосов
/ 11 декабря 2018

Вы должны попробовать что-то вроде этого, но это не работает со значениями вне диапазона:

val bins = Array(0, 100, 250, 500, 1000, 2000, 3000)

val effectiveValue = 625

val rangeToValue = bins.zip(bins.tail)
  .collectFirst { case (left, right) if effectiveValue >= left && effectiveValue <= right =>
    Map(s"$left-$right" -> effectiveValue)
  }
  .getOrElse(Map.empty[String, Int])

rangeToValue("500-1000")
...