如何在表示scala中树的Map中有效地找到根

cdmah0mi  于 2021-07-14  发布在  Java
关注(0)|答案(1)|浏览(408)

如何在表示scala中生成树的Map中找到根。
下面是一个包含树的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))}
5fjcxozz

5fjcxozz1#

下面是一个单行程序,它返回所有节点的列表,这些节点没有出现在任何叶子列表中。

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) 对于示例数据。

相关问题