# 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.