2013-01-08 7 views
6

Ho bisogno di una HashMap di elenchi. Normalmente faccio questo:Scala HashMap di liste: impostazione predefinita più semplice?

val lists = mutable.HashMap[String,List[Int]]() { 
    override def default(key: String) = { 
    val newList = List[Int]() 
    this(key) = newList 
    newList 
    } 
} 

in modo che possa poi semplicemente scrivere le cose come

lists("dog") ::= 14 

, senza doversi preoccupare se la lista "cane" è stato ancora inizializzato.

C'è un modo più pulito per fare questo? Mi trovo a digitare le cinque linee di override predefinite ancora e ancora.

Grazie!

risposta

15

Che dire di withDefaultValue()?

val lists = new mutable.HashMap[String,List[Int]].withDefaultValue(Nil) 

lists("dog") ::= 13 
lists("cat") ::= 14 
lists("dog") ::= 15 //(13, 15) 

Vedi anche

+3

Eccellente! Solo il biglietto. Questo è il motivo per cui adoro lo stackoverflow. –