Je suis nouveau sur scala. L'exemple suivant, je suis un peu confus de ce qui se passe. J'ai créé une carte mutable, puis j'ai poussé trois clés/valeur sur la carte. Je peux récupérer la file d'attente avec des valeurs par clé, mais "web.keys" montre que la carte est vide, et "web.size" renvoie 0! Pourquoi est-ce, et comment puis-je récupérer la bonne taille de la carte?scala - pourquoi map.size renvoie 0 lorsque la carte n'est pas vide
scala> import scala.collection.mutable.{Map, Set, Queue, ArrayBuffer}
scala> val web = Map[Int, Queue[Long]]().withDefaultValue(Queue())
web: scala.collection.mutable.Map[Int,scala.collection.mutable.Queue[Long]] = Map()
scala> web(123).enqueue(567L)
scala> web(123).enqueue(1L)
scala> web(123).enqueue(2L)
scala> web(123)
res96: scala.collection.mutable.Queue[Long] = Queue(567, 1, 2)
scala> web
res97: scala.collection.mutable.Map[Int,scala.collection.mutable.Queue[Long]] = Map()
scala> web.size
res98: Int = 0
scala> web.keys
res99: Iterable[Int] = Set()
Une carte simple fonctionne correctement.
scala> val w= Map[Int,Int]()
w: scala.collection.mutable.Map[Int,Int] = Map()
scala> w(1)=1
scala> w
res10: scala.collection.mutable.Map[Int,Int] = Map(1 -> 1)
scala> w(2)=2
scala> w
res12: scala.collection.mutable.Map[Int,Int] = Map(2 -> 2, 1 -> 1)
scala> w.size
res13: Int = 2
J'ai essayé plus d'expérience, il semble que cela ait quelque chose à voir avec "withDefaultValue". Mais comment puis-je le réparer?
scala> val ww= Map[Int,Int]().withDefaultValue(0)
ww: scala.collection.mutable.Map[Int,Int] = Map()
scala> ww
res14: scala.collection.mutable.Map[Int,Int] = Map()
scala> ww(1) += 1
scala> ww(2) += 2
scala> w.size
res17: Int = 0
Copie possible de [Pourquoi ma carte ne prétend-elle pas avoir de clés après l'ajout de clés?] (Https://stackoverflow.com/questions/44532916/why-does-my-map-claim-to-ha-no- keys-after-adding-keys) ou [Comportement de withDefaultValue dans mutable.Map] (https://stackoverflow.com/q/46650121/1048572) – Bergi