У меня есть изменяемая Карта в 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))
У меня есть "ab c" из другого файла со значением 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
, чтобы обновить значение 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))