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

在Scala中,给定列表列表,如何从元素创建一个嵌套的HashMap?

发布时间:2020-12-16 10:00:50 所属栏目:安全 来源:网络整理
导读:在 Scala中,给定列表列表,如何从元素创建一个嵌套的HashMap?我想将HashMap创建为分层树,以便对于索引i处的元素,索引i-1处的元素是其父元素. 已知长度列表的示例: val lst = List ( List(34,56,78),List(34,79),List (87,23,12),List(87,90,List(1,45,87))s
在 Scala中,给定列表列表,如何从元素创建一个嵌套的HashMap?我想将HashMap创建为分层树,以便对于索引i处的元素,索引i-1处的元素是其父元素.

已知长度列表的示例:

val lst = List (
  List(34,56,78),List(34,79),List (87,23,12),List(87,90,List(1,45,87)
)

scala> lst.groupBy(l => l(0))
  .mapValues(l => l.groupBy(x => x(1)))
  .mapValues{ case x => x.mapValues(y => y.map (z => z(2))) }
res2: scala.collection.immutable.Map[Int,scala.collection.immutable.Map[Int,List[Int]]] = Map(34 -> Map(56 -> List(78,79)),1 -> Map(45 -> List(87)),87 -> Map(23 -> List(12),90 -> List(78)))

当元素的长度已知但不适用于任意长度N时,此方法有效.是否有任何解决方案可以为每个列表具有相同长度的任何长度的列表创建此嵌套映射?

解决方法

一些初步测试似乎表明这可能有效.

def nest(lli: List[List[Int]]): Traversable[_] =
  if (lli.head.size == 1)
    lli.flatten.distinct
  else
    lli.groupBy(_.head)
       .mapValues(vs => nest(vs.map(_.tail)))

(编辑:李大同)

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

    推荐文章
      热点阅读