82 votes

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

92voto

Eastsun Points 9053

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]()
 

ou

 val map = new scala.collection.mutable.Map[A,B]()
 

au lieu.

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

46voto

Kevin Wright Points 31665

Comme toujours, vous devriez vous demander si vous avez vraiment besoin d'une mutable carte.

Immuable cartes sont triviales à construire:

val map = Map(
  "mykey" -> "myval",
  "myotherkey" -> "otherval"
)

Mutable cartes ne sont pas différents quand premier construit:

val map = collection.mutable.Map(
  "mykey" -> "myval",
  "myotherkey" -> "otherval"
)

map += "nextkey" -> "nextval"

Dans ces deux cas, l'inférence sera utilisé pour déterminer les paramètres de type de la Carte de l'instance.

Vous pouvez aussi tenir un immuable de carte en var, la variable sera alors mis à jour avec une nouvelle immuable carte instance à chaque fois que vous effectuez une "mise à jour"

var map = Map(
  "mykey" -> "myval",
  "myotherkey" -> "otherval"
)

map += "nextkey" -> "nextval"

Si vous n'avez pas de valeurs initiales, vous pouvez utiliser la Carte.vide:

val map : Map[String, String] = Map.empty //immutable
val map = Map.empty[String,String] //immutable
val map = collection.mutable.Map.empty[String,String] //mutable

18voto

Synesso Points 8865

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

3voto

0nIce Points 1

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)
 

2voto

kkress Points 459
var test = scala.collection.mutable.Map.empty[String, String]
test("myKey") = "myValue"

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X