Ich denke du erstellst einen neuen? Nur raten, aber normalerweise funktionieren die Dinge so.
o0 '.
Ich bin nicht sicher, was du meinst
Jeriho
3
hmm .. MMMap.toMap?
Dmitry Bespalov
Antworten:
70
Die unveränderliche Hierarchie enthält keine MultiMap, sodass Sie die konvertierte Struktur nicht mit derselben praktischen Syntax verwenden können. Wenn Sie sich jedoch gerne mit Schlüssel / Wertesatz-Paaren befassen, dann:
Wenn Sie nur eine veränderbare Version möchten HashMap, können Sie diese x.toMapin 2.8 oder collection.immutable.Map(x.toList: _*)2.7 verwenden.
Wenn Sie jedoch möchten, dass die gesamte Struktur unveränderlich ist - einschließlich der zugrunde liegenden Menge! -, müssen Sie mehr tun: Sie müssen die Mengen auf dem Weg konvertieren. In 2.8:
Ich war ein bisschen überrascht, als ich "mutableMap.toMap" sah, aber dann überprüfte ich die API und fand nichts Ähnliches. scala-lang.org/docu/files/api/scala/collection/mutable/… Zweite Ausgabe - Set [B] ist veränderlich. Deshalb ist das Konvertieren nicht so einfach.
Jeriho
3
@ Jeriho: toMap wird in Scala2.8
Eastsun
Thx Eastsun. Entschuldigung Jeriho, ich habe es nicht erwähnt.
michael.kebe
12
Sie können myMap.toMapeine veränderbare Karte in Scala 2.8 und späteren Versionen in unveränderliche konvertieren.
Betrachtet man die Definition von toMapaus der Dokumentation:
deftoMap[T, U](implicit ev: A <:< (T, U)): immutable.Map[T, U] = {
val b = immutable.Map.newBuilder[T, U]
for (x <- self) b += x
b.result
}
MMMap.toMap
?Antworten:
Die unveränderliche Hierarchie enthält keine MultiMap, sodass Sie die konvertierte Struktur nicht mit derselben praktischen Syntax verwenden können. Wenn Sie sich jedoch gerne mit Schlüssel / Wertesatz-Paaren befassen, dann:
Wenn Sie nur eine veränderbare Version möchten
HashMap
, können Sie diesex.toMap
in 2.8 odercollection.immutable.Map(x.toList: _*)
2.7 verwenden.Wenn Sie jedoch möchten, dass die gesamte Struktur unveränderlich ist - einschließlich der zugrunde liegenden Menge! -, müssen Sie mehr tun: Sie müssen die Mengen auf dem Weg konvertieren. In 2.8:
In 2.7:
collection.immutable.Map( x.map(kv => (kv._1,collection.immutable.Set(kv._2.toList: _*))).toList: _* )
quelle
scala> val mutableMap = new HashMap[Int, String] mutableMap: scala.collection.mutable.HashMap[Int,String] = Map() scala> mutableMap += 1 -> "a" res5: mutableMap.type = Map((1,a)) scala> mutableMap res6: scala.collection.mutable.HashMap[Int,String] = Map((1,a)) scala> val immutableMap = mutableMap.toMap immutableMap: scala.collection.immutable.Map[Int,String] = Map((1,a)) scala> immutableMap += 2 -> "b" <console>:11: error: reassignment to val immutableMap += 2 -> "b" ^
quelle
Sie können
myMap.toMap
eine veränderbare Karte in Scala 2.8 und späteren Versionen in unveränderliche konvertieren.Betrachtet man die Definition von
toMap
aus der Dokumentation:def toMap[T, U](implicit ev: A <:< (T, U)): immutable.Map[T, U] = { val b = immutable.Map.newBuilder[T, U] for (x <- self) b += x b.result }
quelle
Sie können nur zu folgendem
val imm_map = MMMap.toMap
quelle
Set
Veränderliche; Sie können das Ergebnis nicht mutierenMap
, aber Sie können dasSet