Zwei maps in Scala zusammenführen und dann die Werte mit demselben Schlüssel summieren

Suraj P 30 Januar 2023
  1. Zusammenführen von zwei Maps in Scala mit dem Operator ++
  2. Zusammenführen von maps und Summieren der Werte mit demselben Schlüssel
Zwei maps in Scala zusammenführen und dann die Werte mit demselben Schlüssel summieren

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)
Autor: Suraj P
Suraj P avatar Suraj P avatar

A technophile and a Big Data developer by passion. Loves developing advance C++ and Java applications in free time works as SME at Chegg where I help students with there doubts and assignments in the field of Computer Science.

LinkedIn GitHub

Verwandter Artikel - Scala Map