2017-10-12 1 views

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

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

+0

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_. –

+0

Merci, c'est exactement ce dont j'ai besoin! var map = mutable.Map [Int, Array [Int]](). avecDefaultValue (Array (0,0)) – user1269298

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