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

理想的には、これらは s であるべきですがSet、私のプログラムのコンテキストでは配列であり、パフォーマンス上の理由からそれらをセットに変換したくありません。

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