Scala 和 Map 值

标签 scala map casting

我有一个列表

    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。我如何让它工作以获得我想要的结果?谢谢

最佳答案

m.foldLeft(0)(_+_._2)  

这是一个非常清晰和简单的解决方案。 引用:http://ktuman.blogspot.com/2009/10/how-to-simply-sum-values-in-map-in.html

关于Scala 和 Map 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10007920/

相关文章:

scala - 类型类和子类化

c++ - map<string1, map<string2, map<string3, string>>> 是否比将字符串连接到 map<string1string2string3, string> 慢?

casting - #(井号/井号)在类型签名中是什么意思?

c++ - 以隐式方式在不同类型之间进行类型转换

json - 将任何Scala对象转换为JSON

scala - 如何使用从 Parquet 文件读取的 Spark 数据帧的空格删除/替换列名?

java - 在嵌套数据结构上使用 Java8 流创建 map

c++ - C++ 中作为类成员的静态映射

scala - 为什么 Scala 模式匹配在类型匹配的 for 循环中不起作用?

scala - 无法找到参数写入错误的隐式值,但我使用宏定义了处理程序