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

在scala中将两个列表一起排序

发布时间:2020-12-16 09:52:54 所属栏目:安全 来源:网络整理
导读:说我有两个清单: List(("a",1),("b",4),("d",5),("a",7),6)) 和 List("a","b","c","d") 我想根据第一个列表对它们进行分组,以便我得到: List("a" - List(("a",7)),"b" - List(("b",6)),"d" - List(("d",5))) 实现这一目标的最佳方法是什么?我知道我可以使
说我有两个清单:

List(("a",1),("b",4),("d",5),("a",7),6))

List("a","b","c","d")

我想根据第一个列表对它们进行分组,以便我得到:

List("a" -> List(("a",7)),"b" -> List(("b",6)),"d" -> List(("d",5)))

实现这一目标的最佳方法是什么?我知道我可以使用groupBy和模式匹配预先确定的值,但是当第二个列表没有预先确定时,我会有点卡住.

编辑:

我需要第二个列表中的对象副本作为已处理列表的键.我可能需要通过第二个列表中的on对象的参数进行分组,但仍然将整个对象保持为键…如果这是有意义的.

List(("a",6)) 
List(("a",1,2,3),("c",5,6),6,7))

变为:

List(("a",1) -> List(("a",3) -> List(("b",7) -> List(("d",5)))

对不起,不清楚!

解决方法

根据你的编辑,有一个理解:

for {
  key <- second
  pair <- first.groupBy(_._1).get(key)
} yield key -> pair

或者未经检验的等价物:

second.flatMap(key => first.groupBy(_._1).get(key).map(key -> _))

这两个都为每个键执行groupBy操作.如果这是一个问题,你当然可以通过稍微详细一点来避免它:

val mappings = first.groupBy(_._1)
second.flatMap(key => mappings.get(key).map(key -> _))

并解决您的新编辑问题:如果您需要转换第二个列表中的每个项目以将其用作第一个项目的关键,那么您可以通过以下几种方式进行转换.例如,给定:

val first = List(("a",6))
val second = List(("a",7))

或者:

for {
  item @ (key,_,_) <- second
  pair <- first.groupBy(_._1).get(key)
} yield item -> pair

要么:

for {
  item <- second
  pair <- first.groupBy(_._1).get(item._1)
} yield item -> pair

按需工作.

(编辑:李大同)

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

    推荐文章
      热点阅读