2013-10-08 58 views
2
abstract class FinSet[T] protected() { 
    // given a set other, it returns true iff every element of this is an element of other 
    def <=(other:FinSet[T]): Boolean = 
    // ???? 

这就是我给的目前为止。我对如何实现这种方法有些困惑。我会调用该方法,像这样:检查2套列入斯卡拉

Set(1,2,3).<=(Set(3,2,1)) which should return true 

我不知道这是否会工作,但似乎太简单了:

def <=(other:FinSet[T]): Boolean = if (this == other) true else false 

只是在寻找一些指导。谢谢。

+0

实际上,即使你的* simple *函数最好写作为def <=(other:FinSet [T]):Boolean = this == other'。显然这不会满足'<='的其他部分 - *如果一个集合比另一个更大*怎么办?例如(以大小4设置)<=(以大小5设置)应该也是真实的。你会如何检查这个? –

+0

哦,好的我看到你的观点,如果一套比另一套小。大小写是否匹配?也可以说我不需要担心尺寸差异,这种实施是否正确? – user2516663

回答

1

改写了要求:要检查,这个集合的所有元素,另一组包含的元素。

这听起来像是您可能想要的两个更原始功能的组合。所以,如果你还没有这样做的话,我会定义方法:

def forall(predicate: T => Boolean): Boolean // Checks that predicate holds for all elements 

def contains(elem: T): Boolean // Check that elem is an element of the set 

然后,该方法<=,转予:

def <=(other: FinSet[T]): Boolean = forall(other.contains) 
+0

我有一个包含方法已经定义,但我不能做任何其他的方法,没有给出,所以我不能让所有的一个 – user2516663

+0

为什么不呢?这是一个功课问题吗?无论如何,你总是可以将它定义为'<='中的内部函数,然后调用它。 – Shadowlands

2

& - 指路口,如果第二组不具有来自第一组的元素,下面的代码将返回false。

(thisSet & thatSet) == thisSet 

在细节这个代码计算这组和另一组,并且如果在this相等的元素以产生所述第一表达的检查之间的交叉点。

see & or intersect(more verbose version) method in Scaladoc

你也可以做这样的事情:

thisSet.forall(x => thatSet contains x) 

或更简洁:

thisSet.forall(thatSet contains _) 

或像这样:

(thisSet ++ thatSet) == thatSet 

也许这样:

(thatSet -- thisSet).size == (thatSet.size - thisSet.size) 
+0

当我尝试使用forall(x +。thatSet包含x)时,出现此错误: value forall不是FinSet的成员[T] 我明白为什么会出现此错误,那么我该如何解决此问题。 – user2516663

+0

也许尝试使用删除元素的方法,后者。 –

+0

nope仍然得到相同的错误,除了 - 运算符 – user2516663