2012-06-19 62 views
0
双重的HashMap

我现在有一个变量,它看起来像这样:斯卡拉 - 与Multimap之

val someVal = new HashMap[Float, Set[String]] with MultiMap[Float, String] 

现在我想有以下形式的这些哈希散列:

val someHashOfSomeVal = new HashMap[String, HashMap[Float, Set[String]] with MultiMap[Float, String]] 

在其他字,我需要有一个哈希表(每个键的多个值)的哈希表(每个键的多个值)。任何人都可以帮助我如何声明/变异这个变量?

我是否像这样突变它? someHashOfSomeVal.addBinding("someKey", someVal)

回答

2

目前还不清楚为什么你想要顶层地图在每个关键字上有多个值(在这种情况下是其他地图),或者在实践中如何工作。我会假设你只想MultiMap在较低的水平,在这种情况下,你可以用下面的办法:

import scala.collection.mutable.{ HashMap, MultiMap, Set }  

class TwoLevel[A, B, C] extends HashMap[A, MultiMap[B, C]] { 
    override def default(key: A) = new HashMap[B, Set[C]] with MultiMap[B, C] 
    def addTriple(a: A, b: B, c: C) { 
    this += a -> this(a).addBinding(b, c) 
    } 

    def lookupPair(a: A, b: B): Set[C] = this(a).getOrElse(b, Set.empty) 
} 

val m = new TwoLevel[String, Float, String] 

m.addTriple("a", 1.0F, "b") 
m.addTriple("a", 0.0F, "c") 

println(m.lookupPair("a", 0.0F)) 

它打印Set(c),正如你所期望。