迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 >

在 Scala 中合并两个 map,然后将具有相同键的值相加

作者:迹忆客 最近更新:2023/03/24 浏览次数:

我们将看到 Maps 如何在 Scala 中使用 ++ 进行合并,然后,我们将使用修改后的 ++merged 方法查看不同的方法来合并和求和具有相同键的值哈希 map。


在 Scala 中使用 ++ 运算符合并两个 map

语法:

map1.++(map2)

这里 map2 与 map1 合并,结果 map 作为输出返回。++ 确实合并了 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)

可以观察到,在输出中考虑了最新的 key, value 对,即 Tony,77


合并 map 并对具有相同键的值求和

方法一:

由于使用++ 确实合并了 map 但它消除了重复,这里的想法是首先使用 toList 将 map 转换为列表,然后合并它们以便保留重复,然后使用 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)

方法二:

使用 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)

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

Scala 中的同步

发布时间:2023/03/24 浏览次数:153 分类:编程语言

在本教程中,我们将介绍同步并演示如何在 Scala 语言中使用同步。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便