我需要无视包含在其他元素的集合:集合不包含一个地方a⊆b和b是集合中
Picky(Set(1, 2)) + Set(1) should equal(Picky(Set(1, 2)))
Picky(Set(1)) + Set(1, 2) should equal(Picky(Set(1, 2)))
Picky(Set(1, 3)) + Set(1, 2) should equal(Picky(Set(1, 3), Set(1, 2)))
Picky(Set(1, 2), (Set(1))) should equal(Picky(Set(1, 2)))
其实我有一个解决方案
case class Picky[T] private(sets: Set[Set[T]]) {
def +(s: Set[T]): Picky[T] = Picky(Picky.internalAddition(this.sets, s))
}
object Picky {
def apply[T](sets: Set[T]*): Picky[T] =
Picky((Set[Set[T]]() /: sets)(internalAddition(_, _)))
private def internalAddition[T](c: Set[Set[T]], s: Set[T]): Set[Set[T]] =
if (c.exists(s subsetOf _)) c else c.filterNot(_ subsetOf s) + s
}
但是我想知道是否已经有一个包含这个概念的集合,因为我试图做的听起来有点像一个具有一种还原函数的集合,就像下面一个接受worse
函数的虚构集合(在我们的具体实现中为情况):
PickySet(){(a, b) => a subset b}
如为任何的元件(A,B)如果worse(a, b)
返回true
,a
将被丢弃
为了明确与集的差异,一组将是PickySet的一种特殊情况:
PickySet(){_ == _}
在我看来,你只是想'Set'-语义。区别在哪里? – 2012-03-10 09:48:55
设置丢弃重复元素 设置(1,1)==设置(1)也设置(设置(1),设置(1))==设置(设置(1)) 我正在寻找丢弃的集合 Picky(Set(1,2),Set(1))== Picky(Set(1,2)) – qtwo 2012-03-10 12:19:22