我在Scala中有一个可变映射,定义如下:
scala> var sm = mutable.Map[String, mutable.Map[Int, Int]]()
sm: scala.collection.mutable.Map[String,scala.collection.mutable.Map[Int,Int]] = Map()
我有一个映射,其中有另一个映射作为其值,并将值插入其中,如下所示。
scala> sm += ("abc" -> mutable.Map(1->0,0->0))
res77: scala.collection.mutable.Map[String,scala.collection.mutable.Map[Int,Int]] = Map(abc -> Map(1 -> 0, 0 -> 0))
scala> sm
res78: scala.collection.mutable.Map[String,scala.collection.mutable.Map[Int,Int]] = Map(abc -> Map(1 -> 0, 0 -> 0))
我的“abc”来自另一个值为0或1的文件,我需要验证它并获取0&1的计数并在地图中更新它
sm
.
在验证之前,我试图更新scala REPL上的值,如下所示
scala> sm += ("abc" -> (1 -> sm("abc")(1)+1))
<console>:27: error: type mismatch;
found : Int(1)
required: String
sm += ("abc" -> (1 -> sm("abc")(1)+1))
所以我试着先打开
"abc"->1
使用
sm("abc")(1)
0
并增加了它的价值,也工作得很好。
scala> sm("abc")(1)+2
res90: Int = 2
但是当我用同一个表达式
sm(“abc”)(1)
在地图上
山猫
更新的值
sm(“abc”)(1)
scala> sm += ("abc" -> (1 -> sm("abc")(1)+2))
<console>:27: error: type mismatch;
found : Int(2)
required: String
sm += ("abc" -> (1 -> sm("abc")(1)+2))
scala> var e = sm("abc")(1)+2
e: Int = 2
scala> sm += ("abc" -> (1 -> e ))
<console>:29: error: type mismatch;
found : (Int, Int)
required: scala.collection.mutable.Map[Int,Int]
sm += ("abc" -> (1 -> e ))
这行得通
sm += ("abc" -> mutable.Map(1 -> e ))
但它替换了密钥0并导致
scala> sm += ("abc" -> mutable.Map(1 -> e ))
res93: scala.collection.mutable.Map[String,scala.collection.mutable.Map[Int,Int]] = Map(abc -> Map(1 -> 2))
我无法理解此错误消息。有谁能告诉我我在这里犯了什么错误,我如何更新地图的->地图值,并将输出作为
Map(abc -> Map(1 -> 2, 0 -> 0))