我需要無視包含在其他元素的集合:集合不包含一個地方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