Scala计算映射中的两个值



我有以下映射Map(FULL -> 3854.0, REMAINING -> 3769.0)我想计算这两个值,使(满/剩余)*100有什么好方法可以做到这一点吗?我尝试了m.foldLeft(0)(_/_._2),但编译器抱怨float和Int之间的类型不匹配?

您可以通过将0.0指定为foldLeft的第一个参数来修复类型不匹配,但这不会使代码正确。然后它将计算等于CCD_ 6的CCD_。

事实上,Map(FULL -> 3854.0, REMAINING -> 3769.0)并不能保证会被订购,所以我敢肯定你能做的最好的事情就是m('FULL') / m('REMAINING')

也许你想为此创建一个case class,在这种情况下,你可以只说m.full/m.remaining,甚至可以制作一个自动计算的方法。

对于Map,不能保证这两个值真的存在。因此,正如Ken Bloom已经建议的那样,您可能需要为此创建一个类,或者使用Mapget方法来完成,该方法返回Option[B]:

val resOpt = for {
  full <- m.get("FULL")
  remainig <- m.get("REMAINING")
} yield (full / remaining) * 100
resOpt.getOrElse(someDefaultValue)

这样可以避免严重的运行时错误。

最新更新