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 = 
    // ????

到目前为止,这就是我得到的。我对如何实现此方法有些困惑。我会这样调用方法吗:

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

我想知道这是否可行,但这似乎太简单了:

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

只是寻求一些指导。谢谢。

4

2 回答 2

2

& - 表示交集,如果第二组没有第一组的元素,则以下代码将返回 false。

(thisSet & thatSet) == thisSet

详细地说,这段代码计算了这个集合和另一个集合之间的交集,并检查元素是否在this等于第一个表达式的结果。

&intersect(更详细的版本)方法

你也可以这样做:

thisSet.forall(x => thatSet contains x)

或更简洁:

thisSet.forall(thatSet contains _)

或像这样:

(thisSet ++ thatSet) == thatSet

或者可能是这样的:

(thatSet -- thisSet).size == (thatSet.size - thisSet.size)
于 2013-10-08T21:45:46.063 回答
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)
于 2013-10-08T21:45:27.933 回答