1, "b" -> 2.8), Map("a" -> 3, "c" -> 4), -6ren">
gpt4 book ai didi

Scala 和 Map 值

转载 作者:行者123 更新时间:2023-12-04 15:53:47 26 4
gpt4 key购买 nike

我有一个列表

    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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com