我有以下映射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已经建议的那样,您可能需要为此创建一个类,或者使用Map
的get
方法来完成,该方法返回Option[B]
:
val resOpt = for {
full <- m.get("FULL")
remainig <- m.get("REMAINING")
} yield (full / remaining) * 100
resOpt.getOrElse(someDefaultValue)
这样可以避免严重的运行时错误。