Scala で 2つのマップをマージしてから、同じキーで値を合計する

Suraj P 2023年1月30日
  1. Scala で++ 演算子を使用して 2つのマップをマージする
  2. マップをマージし、同じキーで値を合計する
Scala で 2つのマップをマージしてから、同じキーで値を合計する

Scala で++ を使用して Map がどのようにマージされるかを確認し、次に、で使用可能な変更された++ およびマージ済みメソッドを使用して、同じキーで値をマージおよび合計するさまざまな方法を確認します。HashMap。

Scala で++ 演算子を使用して 2つのマップをマージする

構文:

map1.++(map2)

ここで、map2 は map1 とマージされ、結果の map が出力として返されます。++ はマップをマージしますが、重複を排除します。キー間で競合が発生するたびに、最新のキーと値のペアが考慮されます。

コード例:

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)
    }
}

出力:

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)

最新のキー、値ペア、つまり Tony,77 が出力で考慮されていることがわかります。

マップをマージし、同じキーで値を合計する

方法 1:

++ を使用するとマップがマージされますが、重複が排除されるため、ここでの考え方は、最初に toList を使用してマップをリストに変換し、次にそれらをマージして重複を保持してから、groupBy を使用することです。キーに基づいて値をグループ化し、同じキーのを合計するリストの機能。

コード例:

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)
    }
}

出力:

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)

方法 2:

HashMap で利用可能な merged メソッドを使用します。

コード例:

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)
    }
}

出力:

Merged Map with summed up values : Map(Ruby -> 189, Tony -> 127, Ben -> 78)
著者: 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

関連記事 - Scala Map