0

我有一个整数数组。喜欢:

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))

理想情况下,这些应该是Sets,但在我的程序的上下文中,它们是数组,由于性能原因,我不想将它们转换为集合。

我在 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
    }
}
4

0 回答 0