# Set Types

A set is a collection of ordinal values of the same Integer or Enum type. The set type defines the range of potential values; for each instance of the set, any number of individual items (from none to all of them) can be contained in the set. Each value can only be contained once.

A set type is expressed using the set of keywords, followed by a range of values.

type
DayOfTheWeek = public enum (Mon, Tue, Wed, Thu, Fri, Sat, Sun);

var Weekend: set of DayOfTheWeek := [DayOfTheWeek.Sat, DayOfTheWeek.Subn];

if TodaysDay in Weekend then
PartyTime();

Sets can be comprised of Enum values (as shown above), or Integer values:

type
DaysOfTheMonth: set of 1..31;

var FirstFewPrimeNumbers: set of Integer := [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31];

Sets are limited to 64 individual possible values, ensuring they can be stored in an UInt64 value. Sets containing 32 or less items are stored in an UInt32.

## Operators

The following Operators are supported on sets:

Operator Meaning
+ Union of two sets: [a,b,e] + [c,e,f] = [a,b,c,e,f]
- Difference of two sets: [a,b,c,d] - [a,c] = [b,d]
* Intersection: [a,b,e] * [c,e,f] = [e]
= Exact equal; only true if all elements are the same in both
Not equal
< Subset, true if the right side has all elements the left set has, and more
> Superset, true if the left side has all elements the right set has, and more
Subset, true if equal or if the right side has all elements the left set has
Superset, true if equal or if the left side has all elements the right set has
in Check if an enum or integer is in a set: a in [a, b, c]
not in returns not (a in b).

Note that Oxygene's language level sets are not to be confused with Swift's higher-level Set<T> struct.