2016-07-06 4 views
1

値がすでに存在するかどうかを調べるには、特定のキーのすべての値をチェックする必要があります。私は以下のコードを持っているので、常に最後の値がキーに追加されます。どのように値のリスト全体を反復処理するのですか?スカラハッシュマップで指定されたキーの値を繰り返し処理する

val map = scala.collection.mutable.HashMap.empty[Int, String] 
map.put(0, "a") 
map.put(0, "b") 
map.put(0, "c") 
map.put(0, "d") 
map.put(0, "e") 
map.put(0, "f") 

for ((k, v) <- map) {println("key: " + k + " value: " + v)} 

出力:

map: scala.collection.mutable.HashMap[Int,String] = Map() 
res0: Option[String] = None 
res1: Option[String] = Some(a) 
res2: Option[String] = Some(b) 
res3: Option[String] = Some(c) 
res4: Option[String] = Some(d) 
res5: Option[String] = Some(e) 

key: 0 value: f 
res6: Unit =() 
+0

ので、あなたは歴史*のいくつかの種類を持っていると思います*あなたの地図? –

+2

マップに同じキーに複数の値を含めることはできません。最後のものが前のものを上書きします。代わりにMultiMapを使用することができます(http://www.scala-lang.org/api/2.9.0/scala/collection/mutable/MultiMap.html) –

答えて

2

キーがHashMapでユニークです。同じキーに対して複数の値を設定することはできません。あなたにできることはHashMap[Int, Set[String]]を持っていると@TzachZoharが指摘するように値がセット内に含まれる、あるいは単純されている場合、MultiMapを確認している。

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

scala> val mm = new HashMap[Int, Set[String]] with MultiMap[Int, String] 
mm: scala.collection.mutable.HashMap[Int,scala.collection.mutable.Set[String]] with scala.collection.mutable.MultiMap[Int,String] = Map() 

scala> mm.addBinding(0, "a") 
res9: <refinement>.type = Map(0 -> Set(a)) 

scala> mm.addBinding(0, "b") 
res10: <refinement>.type = Map(0 -> Set(a, b)) 

scala> mm.entryExists(0, _ == "b") 
res11: Boolean = true 
+0

マルチマップはなぜ必要ですか? HashMap [Int、Set [String]]で十分だと思われます。 –

+1

'MultiMap'は' HashMap [Int、Set [String]] 'を囲む便利なラッパーです。 'mm.addBinding'を呼び出すだけで、セットにデータを追加することができます。その代わりに、' Map'からセットを抽出して、追加したデータを追加します。 –

関連する問題