合并集合包含Scala中的公共元素

spy*_*pyk 11 scala scala-collections

我想在Scala中实现一个函数,给定一组Ints将合并任何包含一个或多个公共元素的Set.

例如,给定:

def mergeSets(sets: Set[Set[Int]]): Set[Set[Int]] = ???

val sets = Set(Set(1,2), Set(2,3), Set(3,7), Set(8,10))  
val mergedSets = mergeSets(sets)
Run Code Online (Sandbox Code Playgroud)

mergedSets将包含Set(Set(1,2,3,7),Set(8,10))

如果可能的话,在Scala中执行此操作的方法是什么?

sam*_*est 6

最有效的方法是使用可变结构,但是你要求一种功能方式,所以这里是:

sets.foldLeft(Set.empty[Set[Int]])((cum, cur) => {
  val (hasCommon, rest) = cum.partition(_ & cur nonEmpty)
  rest + (cur ++ hasCommon.flatten)
})
Run Code Online (Sandbox Code Playgroud)

(未测试,用手机写的)