Zwei maps in Scala zusammenführen und dann die Werte mit demselben Schlüssel summieren
-
Zusammenführen von zwei Maps in Scala mit dem Operator
++
- Zusammenführen von maps und Summieren der Werte mit demselben Schlüssel
Wir werden sehen, wie Maps mit ++
in Scala zusammengeführt werden, und dann werden wir verschiedene Möglichkeiten zum Zusammenführen und Summieren der Werte mit demselben Schlüssel mit der modifizierten Methode ++
und merged
betrachten, die mit verfügbar ist HashMap.
Zusammenführen von zwei Maps in Scala mit dem Operator ++
Syntax:
map1.++(map2)
Hier wird map2 mit map1 zusammengeführt, und die resultierende map
wird als Ausgabe zurückgegeben. ++
führt die Maps zwar zusammen, eliminiert aber die Duplikate; das letzte Schlüssel, Wert
-Paar wird berücksichtigt, wenn Konflikte zwischen Schlüsseln auftreten.
Beispielcode:
object Main {
def main(args: Array[String])
{
//let's assume a mapping from Student -> marks
val map1_english = Map("Tony" -> 50, "Ruby" -> 89)
val map2_maths = Map("Tony"->77,"Ruth" -> 100, "Ben" -> 78)
println("Map1 : " + map1_english)
println("Map2 : " + map2_maths)
// merging the map
val mergedMap = map1_english.++(map2_maths)
println("Class marks are : " + mergedMap)
}
}
Ausgabe:
Map1 : Map(Tony -> 50, Ruby -> 89)
Map2 : Map(Tony -> 77, Ruth -> 100, Ben -> 78)
Class marks are : Map(Tony -> 77, Ruby -> 89, Ruth -> 100, Ben -> 78)
Es kann beobachtet werden, dass das letzte Schlüssel, Wert
-Paar, d. h. Tony,77
, in der Ausgabe berücksichtigt wird.
Zusammenführen von maps und Summieren der Werte mit demselben Schlüssel
Methode 1:
Da die Verwendung von ++
die maps zusammenführt, aber das Duplikat eliminiert, besteht die Idee hier darin, die maps zuerst mit toList
in eine Liste zu konvertieren, sie dann zusammenzuführen, damit Duplikate erhalten bleiben, und dann die Funktion groupBy
zu verwenden. die Funktion der Liste, um die Werte basierend auf Schlüsseln zu gruppieren und die Werte
für dieselben Schlüssel zu summieren.
Beispielcode:
object Main {
def main(args: Array[String])
{
val map1_english = Map("Tony" -> 50, "Ruby" -> 89)
val map2_maths = Map("Tony"->77,"Ruby" -> 100, "Ben" -> 78)
val mergedList = map1_english.toList ++ (map2_maths.toList)
println("Merged List : " + mergedList)
val mergedKeys = mergedList.groupBy(_._1).map{case (k,v) => k -> v.map(_._2).sum}
println("Merged Map with summed up values : " + mergedKeys)
}
}
Ausgabe:
Merged List : List((Tony,50), (Ruby,89), (Tony,77), (Ruby,100), (Ben,78))
Merged Map with summed up values : Map(Ruby -> 189, Ben -> 78, Tony -> 127)
Methode 2:
Verwenden der mit HashMap verfügbaren merged
-Methode.
Beispielcode:
object Main {
def main(args: Array[String])
{
val map1_english = collection.immutable.HashMap("Tony" -> 50, "Ruby" -> 89)
val map2_maths = collection.immutable.HashMap("Tony"->77,"Ruby"-> 100, "Ben"->78)
val merged = map1_english.merged(map2_maths)({ case ((k,v1),(_,v2)) =>(k,v1+v2)})
println("Merged Map with summed up values : " + merged)
}
}
Ausgabe:
Merged Map with summed up values : Map(Ruby -> 189, Tony -> 127, Ben -> 78)