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 に答える