8

それらをSortedCollectionにソートする必要があると言われましたが、セット要素は比較できません(ソートに使用する方法がわからないID比較のみ)。

set1 = set2 のようにそれらを比較するのは安全ですか、それとも並べ替える必要がありますか (ID の方法は?)。

次のようなソートブロックについて考えていました。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

2つのセットを比較したい場合は、を安全に使用できますset1 = set2。セットの要素は、等式を使用して比較されます。等しいオブジェクトが含まれている場合、2つのセットは等しくなります。

それらを並べ替えても、同等性の比較には意味がありません。

Set equalityは(大まかに)次のように実装されていることに注意してください。

  • 両方のセットのサイズが等しい場合
  • set2のすべての要素がset1に含まれている場合

->それらは同じサイズであり、set1のすべての要素がset2にあるため、それらは等しくなければなりません。

于 2013-01-26T18:26:52.127 に答える