我有一个整数数组。像:
val t1 = Array(Array(1, 2, 3), Array(2), Array(4, 5, 6), Array(5, 6))
我想删除作为另一个数组子集的数组。所以,结果应该是:
Array(Array(1, 2, 3), Array(4, 5, 6))
理想情况下,这些应该是Set
s,但在我的程序环境中,它们是数组,并且由于性能原因,我不想将它们转换为集合。
我在Scala中以这种方式解决了这个问题,但我想知道是否有更优雅(和/或更有效)的方法来实现这一点:
def removeSubsets[T: ClassManifest](clusters: Array[Array[T]]) = {
val sortedClusters = clusters.sortBy(-1 * _.length)
sortedClusters.foldLeft(Array[Array[T]]()){ (acc, ele) =>
val isASubset = acc.exists(arr => (ele diff arr).length == 0)
if (isASubset) acc else acc :+ ele
}
}