0

我目前有一个看起来像这样的变量:

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)

4

1 回答 1

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)正如您所期望的那样打印。

于 2012-06-19T18:18:15.033 回答