Aus irgendeinem seltsamen Grund gibt es diese eine Methode merged
, die nur in scala.collection.immutable.HashMap
, aber nicht in generischen Map
Eigenschaft (vielleicht seine Implementierung macht es sehr ungenießbar zu anderen Map
Implementierungen?) Deklariert.Wie konvertiert man von scala Map zu scala.collection.immutable.HashMap?
Also ich muss meine Map[A, B]
zu HashMap[A, B]
konvertieren und bis jetzt kann ich keinen einfachen Weg finden, dies zu tun. Dies ist meine aktuelle Implementierung zu hack um def to[Col[_]]
, die unäre höher-art anstelle von binary höher-art erwartet.
val m1 = Map("foo" -> 1)
val m2 = Map("foo" -> 2, "bar" -> 2)
type HM[_] = HashMap[String, Int]
(m1.to[HM] merged m2.to[HM]) { case ((k1, v1), (k2, v2)) => (k1, v1 + v2) } // Map("foo" -> 3, "bar" -> 2)
Es funktioniert wie erwartet, aber ich kann nicht umhin zu denken, muss es eine bessere Art und Weise sein, von Map
zu HashMap
zu konvertieren (da es ist die Default-Implementierung).
Oder vielleicht in allgemeineren, besseren Weg, um auf Standard-Implementierung von Scala-Sammlung generische Merkmale zuzugreifen?
Vielleicht 'HashMap (m1.toSeq: _ *)'? Weitere Optionen zum Zusammenführen von Karten finden Sie unter http://stackoverflow.com/questions/7076128/best-way-to-merge-two-maps-and-sum-the-values-of-same-key. –
Wenn Sie Operationen verwenden, die nur in 'HashMap' verfügbar sind, warum deklarieren Sie Ihre Maps nicht als' HashMap'? –
@ Łukasz Ja, ich habe diese Frage gesehen, aber dieser Teil meines Codes ist sehr leistungsempfindlich und die Verwendung von 'toSeq' erfordert 2 Iterationen. Auf der gleichen Note ist "fusioniert" angeblich sehr effizient, also wäre es schön, es zu benutzen. –