我有下面的地图Map(FULL -> 3854.0, REMAINING -> 3769.0)
我想计算两个值,使得 (FULL/REMAINING)*100 有一个好方法吗?我试过m.foldLeft(0)(_/_._2)
了,但编译器抱怨 float 和 Int 之间的类型不匹配?
问问题
79 次
2 回答
4
您可以通过指定0.0
为 的第一个参数来修复类型不匹配foldLeft
,但这不会使您的代码正确。然后它将计算0.0/3854.0/3769.0
which equals 0.0
。
事实上,Map(FULL -> 3854.0, REMAINING -> 3769.0)
不能保证被订购,所以我很确定你能做的最好的就是m('FULL') / m('REMAINING')
。
也许您想为此创建一个case class
,在这种情况下,您可以说m.full/m.remaining
甚至创建一个方法来自动计算它。
于 2012-08-20T23:21:12.227 回答
1
使用 Map,不能保证这两个值确实存在。因此,您可能想要为此创建一个类,正如 Ken Bloom 已经建议的那样,或者使用get
of 方法来实现Map
,该方法返回一个Option[B]
:
val resOpt = for {
full <- m.get("FULL")
remainig <- m.get("REMAINING")
} yield (full / remaining) * 100
resOpt.getOrElse(someDefaultValue)
这样可以避免令人讨厌的运行时错误。
于 2012-08-21T13:04:27.217 回答