8

有人告诉我必须将它们排序到 SortedCollection,但 Set 元素不可比较(只有身份比较,我不知道如何用于排序)。

那么像 set1 = set2 那样比较它们是否安全,或者我是否需要对它们进行排序(身份如何?)。

我在考虑这样的排序块: [:pre :succ | pre OID < succ OID],这行得通吗?

4

2 回答 2

6

怎么样

(set1 size = set2 size) and: [set1 includesAllOf: set2]

根据 Smalltalk 实现,您还可以使用=. 例如,在 Squeak 中,它是这样实现的:

= aSet
    ...
    self size = aSet size ifFalse: [^ false].
    self do: [:each | (aSet includes: each) ifFalse: [^ false]].
    ^ true
于 2013-01-26T17:56:53.213 回答
3

如果要比较两组,可以放心使用set1 = set2. 使用相等比较集合的元素。如果两个集合包含相等的对象,则它们是相等的。

对它们进行排序对于相等比较没有意义。

请注意 Set 相等的实现(大致)如下:

  • 如果两组大小相等
  • 如果 set2 的所有元素都包含在 set1 中

-> 因为它们具有相同的大小并且 set1 的所有元素都在 set2 中,所以它们必须相等。

于 2013-01-26T18:26:52.127 回答