Je suis nouveau à scala. Comme titre, je voudrais créer une carte mutable Map[Int,(Int, Int)]
et avec la valeur par défaut comme tuple (0,0) si la clé n'existe pas. En python, le "defaultdict" facilite un tel effort. quelle est la façon élégante de le faire à Scala?scala - créer une carte mutable et avec la valeur par défaut comme (0,0) si la clé n'existe pas
0
A
Répondre
4
Utilisez withDefaultValue
après avoir créé la carte:
import scala.collection.mutable
val map = mutable.Map[Int,(Int, Int)]().withDefaultValue((0, 0))
1
vous lookign probablement pour .getOrElseUpdate
qui prend la clé, sinon des mises à jour actuelles avec une valeur donnée.
scala> val googleMap = Map[Int, (Int, Int)]().empty
googleMap: scala.collection.mutable.Map[Int,(Int, Int)] = Map()
scala> googleMap.getOrElseUpdate(100, (0, 0))
res3: (Int, Int) = (0,0)
scala> googleMap
res4: scala.collection.mutable.Map[Int,(Int, Int)] = Map(100 -> (0,0))
Vous pouvez également passer la partie orElse
implicitement,
scala> implicit val defaultValue = (0, 0)
defaultValue: (Int, Int) = (0,0)
scala> googleMap.getOrElseUpdate(100, implicitly)
res8: (Int, Int) = (0,0)
scala> googleMap
res9: scala.collection.mutable.Map[Int,(Int, Int)] = Map(100 -> (0,0))
+0
bon à savoir. Merci d'avoir partagé! – user1269298
solution de Nice! Une autre question naïve, j'ai changé le tuple en Array pour rendre son élément incrémentable comme cette carte (0) + = 1. Mais l'instruction var map = mutable.Map [Int, Array [Int, Int]]() .withDefaultValue (Array [0, 0]) provoque une erreur – user1269298
Essayez 'var map = mutable.Map [Int, Array [(Int, Int)]](). WithDefaultValue (Array ((0, 0))) 'si vous voulez que ce soit un tableau de _tuples_. Ou 'var map = mutable.Map [Int, Array [Int]](). AvecDefaultValue (Array (0))' si vous voulez que ce soit un tableau de _ints_. –
Merci, c'est exactement ce dont j'ai besoin! var map = mutable.Map [Int, Array [Int]](). avecDefaultValue (Array (0,0)) – user1269298