我想在 Scala 中实现一个函数,给定一组 Int 集合,该函数将合并任何包含一个或多个公共元素的包含集合。
例如,给出:
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)
mergedSets 将包含 Set(Set(1,2,3,7), Set(8,10))
如果可能的话,在 Scala 中执行此操作的一种好的、高效且实用的方法是什么?
最有效的方法是使用可变结构,但您需要一种函数式方法,所以这里是:
sets.foldLeft(Set.empty[Set[Int]])((cum, cur) => {
val (hasCommon, rest) = cum.partition(_ & cur nonEmpty)
rest + (cur ++ hasCommon.flatten)
})
(未测试,用手机写的)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)