【问题标题】:How to get the limit bound for a specific value from an array in Scala?如何从Scala中的数组中获取特定值的限制?
【发布时间】: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:M​​ap[String,Double] = (1000-2000 -> 625)

【问题讨论】:

  • 您可以将数组分成两部分:第一个包含小于 x 的值,第二个包含大于 x 的值并从那里开始工作。

标签: scala dictionary scala-collections


【解决方案1】:

您应该尝试这样的方法,但它不适用于超出范围的值:

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")

【讨论】:

  • 嗨@mkUltra,感谢您的解决方案,但 rangeToValue 如下: Map(500-1000 -> Some(625)) 但我需要 Map(500-1000 -> 625)
  • 你确定调用 rangeToValue 的 'apply' 而不是 'get' 吗? rangeToValue("500-1000") 应该返回 625,rangeToValue.get("500-1000") 返回 Some(625)
  • 是的,我确定。我想将值存储在 val rangeToValue:[String,Double]
  • 你能用你的代码更新问题吗?
  • cumulativeDelay.get 返回Option,只使用cumulativeDelay(linkId)
猜你喜欢
  • 1970-01-01
  • 2016-07-15
  • 2019-10-23
  • 1970-01-01
  • 2015-06-13
  • 1970-01-01
  • 2021-03-25
相关资源
最近更新 更多