私はリストを持っています
val l : List[Map[String,Any]] = List(Map("a" -> 1, "b" -> 2.8), Map("a" -> 3, "c" -> 4), Map("c" -> 5, "d" -> "abc"))
次のコードを使用して、キー "a" (Int)、"b" (Double)、および "c" (Int) の合計を求めました。「d」はノイズとして含まれています。
l.map(n => n.mapValues( v => if (v.isInstanceOf[Number]) {v match {
case x:Int => x.asInstanceOf[Int]
case x:Double => x.asInstanceOf[Double]
}} else 0)).foldLeft((0,0.0,0))((t, m) => (
t._1 + m.get("a").getOrElse(0),
t._2 + m.get("b").getOrElse(0.0),
t._3 + m.get("c").getOrElse(0)))
出力は (4, 2.8, 9) になると思いますが、代わりにゴミ箱に入れられました
<console>:10: error: overloaded method value + with alternatives:
(x: Int)Int <and>
(x: Char)Int <and>
(x: Short)Int <and>
(x: Byte)Int
cannot be applied to (AnyVal)
例外は、「+」が AnyVal では機能しないことを伝えようとしていたと思います。これを機能させて、必要な結果を得るにはどうすればよいですか? ありがとう