Quelle est la syntaxe pour ajouter un élément à un scala.collection.mutable.Map?
Voici quelques tentatives infructueuses:
val map = scala.collection.mutable.Map
map("mykey") = "myval"
map += "mykey" -> "myval"
map.put("mykey","myval")
Le fait est que la première ligne de vos codes ne correspond pas à vos attentes.
Tu devrais utiliser:
val map = scala.collection.mutable.Map[A,B]()
Vous avez alors plusieurs alternatives équivalentes pour ajouter des éléments:
scala> val map = scala.collection.mutable.Map[String,String]()
map: scala.collection.mutable.Map[String,String] = Map()
scala> map("k1") = "v1"
scala> map
res1: scala.collection.mutable.Map[String,String] = Map((k1,v1))
scala> map += "k2" -> "v2"
res2: map.type = Map((k1,v1), (k2,v2))
scala> map.put("k3", "v3")
res3: Option[String] = None
scala> map
res4: scala.collection.mutable.Map[String,String] = Map((k3,v3), (k1,v1), (k2,v2))
Et à partir de Scala 2.13
:
scala> map.addOne("k4" -> "v4")
res5: map.type = HashMap(k1 -> v1, k2 -> v2, k3 -> v3, k4 -> v4)
Comme toujours, vous devriez vous demander si vous avez vraiment besoin d’une carte modifiable.
Les cartes immuables sont faciles à construire:
val map = Map(
"mykey" -> "myval",
"myotherkey" -> "otherval"
)
Les cartes mutables ne sont pas différentes lors de la construction initiale:
val map = collection.mutable.Map(
"mykey" -> "myval",
"myotherkey" -> "otherval"
)
map += "nextkey" -> "nextval"
Dans ces deux cas, l'inférence sera utilisée pour déterminer les paramètres de type corrects pour l'instance de carte.
Vous pouvez également conserver une carte immuable dans un var
, la variable sera ensuite mise à jour avec une nouvelle instance de carte immuable à chaque fois que vous effectuerez une "mise à jour".
var map = Map(
"mykey" -> "myval",
"myotherkey" -> "otherval"
)
map += "nextkey" -> "nextval"
Si vous n'avez aucune valeur initiale, vous pouvez utiliser Map.empty:
val map : Map[String, String] = Map.empty //immutable
val map = Map.empty[String,String] //immutable
val map = collection.mutable.Map.empty[String,String] //mutable
Quand tu dis
val map = scala.collection.mutable.Map
vous ne créez pas une instance de carte, mais croyez plutôt le type de carte.
map: collection.mutable.Map.type = scala.collection.mutable.Map$@fae93e
Essayez plutôt ce qui suit:
scala> val map = scala.collection.mutable.Map[String, Int]()
map: scala.collection.mutable.Map[String,Int] = Map()
scala> map("asdf") = 9
scala> map
res6: scala.collection.mutable.Map[String,Int] = Map((asdf,9))
Créer une nouvelle carte immuable:
scala> val m1 = Map("k0" -> "v0")
m1: scala.collection.immutable.Map[String,String] = Map(k0 -> v0)
Ajoutez une nouvelle paire clé/valeur à la carte ci-dessus (et créez une nouvelle carte, car elles sont immuables):
scala> val m2 = m1 + ("k1" -> "v1")
m2: scala.collection.immutable.Map[String,String] = Map(k0 -> v0, k1 -> v1)
Créez une carte modifiable sans valeur initiale:
scala> var d= collection.mutable.Map[Any, Any]()
d: scala.collection.mutable.Map[Any,Any] = Map()
Créez une carte modifiable avec des valeurs initiales:
scala> var d= collection.mutable.Map[Any, Any]("a"->3,1->234,2->"test")
d: scala.collection.mutable.Map[Any,Any] = Map(2 -> test, a -> 3, 1 -> 234)
Mettre à jour la valeur clé existante:
scala> d("a")= "ABC"
Ajouter une nouvelle valeur-clé:
scala> d(100)= "new element"
Vérifiez la carte mise à jour:
scala> d
res123: scala.collection.mutable.Map[Any,Any] = Map(2 -> test, 100 -> new element, a -> ABC, 1 -> 234)
var test = scala.collection.mutable.Map.empty[String, String]
test("myKey") = "myValue"