Map(FULL -> 3854.0, REMAINING -> 3769.0)
(FULL/REMAINING)*100 のような 2 つの値を計算したい次のマップがあります。これを行う良い方法はありますか? 試してみm.foldLeft(0)(_/_._2)
ましたが、float と Int の型の不一致についてコンパイラが不平を言っていますか?
質問する
79 次
2 に答える
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
を自動的に計算するメソッドを作成することもできます。
于 2012-08-20T23:21:12.227 に答える
1
Map では、2 つの値が実際に存在するという保証はありません。したがって、Ken Bloom がすでに提案したように、そのためのクラスを作成するか、次のget
メソッドを使用してそれを行うことが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 に答える