web-dev-qa-db-fra.com

Quelle est la syntaxe pour ajouter un élément à un scala.collection.mutable.Map?

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")
73
Koala3

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)
81
Eastsun

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
43
Kevin Wright

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))
17
Synesso

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)
2
0nIce

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)
2
Andy Dong
var test = scala.collection.mutable.Map.empty[String, String]
test("myKey") = "myValue"
2
kkress