加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Scala:按键合并地图

发布时间:2020-12-16 09:38:28 所属栏目:安全 来源:网络整理
导读:说我有两张地图: val a = Map(1 - "one",2 - "two",3 - "three")val b = Map(1 - "un",2 - "deux",3 - "trois") 我想通过键合并这些地图,应用一些函数来收集值(在这种特殊情况下,我想将它们收集到一个seq中,给出: val c = Map(1 - Seq("one","un"),2-Se
说我有两张地图:

val a = Map(1 -> "one",2 -> "two",3 -> "three")
val b = Map(1 -> "un",2 -> "deux",3 -> "trois")

我想通过键合并这些地图,应用一些函数来收集值(在这种特殊情况下,我想将它们收集到一个seq中,给出:

val c = Map(1 -> Seq("one","un"),2->Seq("two","deux"),3->Seq("three","trois"))

觉得应该有一个很好的惯用的方式来做这个 – 有什么建议吗?如果解决方案涉及到scalaz,我很高兴

解决方法

scala.collection.immutable.IntMap有一个交叉方式,正是你想要的(我相信):

import scala.collection.immutable.IntMap

val a = IntMap(1 -> "one",3 -> "three",4 -> "four")
val b = IntMap(1 -> "un",3 -> "trois")

val merged = a.intersectionWith(b,(_,av,bv: String) => Seq(av,bv))

这给了你IntMap(1 – > List(one,un),2 – > List(two,deux),3 – > List(three,trois))。请注意,它正确地忽略只发生在a中的键。

作为附注:我经常发现自己想要在Scala的Haskell’s Data.Map中使用unionWith,intersectionWith等功能。我认为没有任何原则的原因,它们应该只能在IntMap上使用,而不是在base collection.Map trait中。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读