Scala在地图中计算两个值

时间:2012-08-20 23:16:30

标签: scala

我有以下地图Map(FULL -> 3854.0, REMAINING -> 3769.0) 我想计算两个值,使得(FULL / REMAINING)* 100 有一个很好的方法来做到这一点?我试过m.foldLeft(0)(_/_._2)但是编译器抱怨float和Int之间的类型不匹配?

2 个答案:

答案 0 :(得分:4)

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

事实上,Map(FULL -> 3854.0, REMAINING -> 3769.0)并不保证会被订购,因此我非常确定您能做的最好的事情是m('FULL') / m('REMAINING')

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

答案 1 :(得分:1)

使用Map,无法保证这两个值确实存在。因此,您可能想要为Ken Bloom已经建议的那样创建一个类,或者使用get Map方法创建一个类,该方法返回Option[B]

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

resOpt.getOrElse(someDefaultValue)

这样可以避免讨厌的运行时错误。