有人告诉我必须将它们排序到 SortedCollection,但 Set 元素不可比较(只有身份比较,我不知道如何用于排序)。
那么像 set1 = set2 那样比较它们是否安全,或者我是否需要对它们进行排序(身份如何?)。
我在考虑这样的排序块: [:pre :succ | pre OID < succ OID],这行得通吗?
有人告诉我必须将它们排序到 SortedCollection,但 Set 元素不可比较(只有身份比较,我不知道如何用于排序)。
那么像 set1 = set2 那样比较它们是否安全,或者我是否需要对它们进行排序(身份如何?)。
我在考虑这样的排序块: [:pre :succ | pre OID < succ OID],这行得通吗?
怎么样
(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
如果要比较两组,可以放心使用set1 = set2
. 使用相等比较集合的元素。如果两个集合包含相等的对象,则它们是相等的。
对它们进行排序对于相等比较没有意义。
请注意 Set 相等的实现(大致)如下:
-> 因为它们具有相同的大小并且 set1 的所有元素都在 set2 中,所以它们必须相等。