Set a set according to equality

Inherits from: Object : Collection

A Set is s collection of objects, no two of which are equal.

Most of its methods are inherited from Collection.

The contents of a Set are unordered. You must not depend on the order of items in a set.

For an ordered set, see OrderedIdentitySet.

Add anObject to the Set. An object which is equal to an object already in the Set will not be added.

remove(anObject)

Remove anObject from the Set.

Set[1, 2, 3].remove(3).postln;

Iteration:

do(function)

Evaluates function for each item in the Set.

The function is passed two arguments, the item and an integer index.

Set[1, 2, 3, 300].do({ arg item, i; item.postln });

keyAt(index)

returns the object at the internal index. This index is not deterministic.

Set specific operations:

sect(that) return the set theoretical intersection of this and that

this & that

a = Set[1, 2, 3]; b = Set[2, 3, 4, 5];

sect(a, b);

a & b // shorter syntax

union(that) return the set theoretical union of this and that

this | that

a = Set[1, 2, 3]; b = Set[2, 3, 4, 5];

union(a, b);

a | b // shorter syntax

difference(that) return the set of all items which are elements of this, but not of that

this - that

a = Set[1, 2, 3]; b = Set[2, 3, 4, 5];

difference(a, b);

a - b // shorter syntax

symmetricDifference(that) return the set of all items which are not elements of both  this and that

this -- that

a = Set[1, 2, 3]; b = Set[2, 3, 4, 5];

symmetricDifference(a, b);

a -- b // shorter syntax

isSubsetOf(that) returns true if all elements of this are also elements of that

a = Set[1, 2, 3, 4];

Set[1, 2].isSubsetOf(a); // true

Set[1, 5].isSubsetOf(a); // false

// example:

a = Set[1, 2, 3, 4];

b = a.powerset; // set of all parts

a.isSubsetOf(b); // false: no set is ever part of itself.

b.asArray.reduce(\union) == a; // true parts may not contain other elements that original

b.asArray.reduce(\difference).isEmpty; // true.

// you can use Set to efficiently remove duplicates from an array:

a = [1, 2, 3, 4, 3, 5, 5, 2, 2, 1];

a.as(Set); // convert to set

a.as(Set).as(Array); // and convert back