整数の配列の配列があります。お気に入り:
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
}
}