【问题标题】:How do I efficiently find the root in a map which represents a tree in Scala如何有效地在表示 Scala 中的树的地图中找到根
【发布时间】:2019-02-22 00:53:29
【问题描述】:

如何在代表 Scala 中的生成树的 Map 中找到根。

下面是一个包含树的地图示例。

val l = List((1,List(2,3,4)), (2,List(5,6)), (3,List(7,8,9)))
val m1 = l.groupBy(_._1).map{ case (k, v) => (k, v.map(_._2))}

【问题讨论】:

  • 问题已更新。它现在应该符合 StackOverflow 标准。
  • 代码创建数据结构。该代码没有找到树的根。请删除减分。问题是如何(有效地)找到树的根。

标签: scala tree root


【解决方案1】:

这是一个单行代码,它返回一个列表,其中包含所有未出现在任何叶子列表中的节点。

l.collect{ case (k, _) if !l.exists(_._2.contains(k)) => k }

更高效的两行版本:

val leaves = l.flatMap(_._2).toSet
l.collect{ case (k, _) if !leaves.contains(k) => k }

更高效:

val leaves: Set[Int] = l.flatMap(_._2)(collection.breakOut)
l.collect{ case (k, _) if !leaves.contains(k) => k }

所有这些都为样本数据返回List(1)

【讨论】:

    猜你喜欢
    • 2021-06-26
    • 1970-01-01
    • 2011-11-24
    • 2018-02-27
    • 1970-01-01
    • 2020-08-28
    • 2014-03-28
    • 2020-04-04
    • 1970-01-01
    相关资源
    最近更新 更多