The Set also contains a collection of elements of the same data type similar to arrays, and stores unique elements.

The Set stores elements or ordinal type only. The set contains a dynamic size length.

Important points about the Nim Set

• Set contains a collection of elements of the same data type under a single variable name
• Dynamic size
• Duplicate elements are not allowed
• It allocates memory on the heap
• Set elements are not ordered

Let’s see different examples of Set type.

## How to Declare and assign a set type in Nim Language?

Set type created using `set[datatype]` where datatype is one of the ordinal types following

• int8- int16
• uint8/byte-uint16
• char
• enum

Here is an example

``````var numbers: set[int8]
echo numbers # {}
``````

If you declare a set[int] and throw an error set is too large.

Another way, create with empty braces `{}` Let’s create an empty set.

``````var numbers = {}
echo numbers # {}
``````

Another Set literal syntax that contains elements separated by a comma, wrapped inside `{}` Here, the type of set is inferred from a given value ie.`int8`

``````var numbers = {1,2,3,12}
echo numbers # {1,2,3,12}
``````
``````var vowels = {'a','e','i','o','u'}
echo vowels # {'a','e','i','o','u'}
``````

## Check if an element exists in a set

Multiple ways we can check an element exists in a set.

• `in` operator check if an element exists in a set, and return true. else return false.

• `notin` checks if an element does not exist in a set and return true, else return false. Here is an example

``````var vowels = {'a','e','i','o','u'}
echo vowels
echo 'a' in vowels # true
echo 'b' in vowels # false

echo 'a' notin vowels # false
echo 'b' notin vowels # true
``````
• contains checks elements contains in a set
``````var vowels = {'a','e','i','o','u'}
echo vowels
echo contains(vowels,'a') # true
echo contains(vowels,'b') # false

``````

## Iterate Nim Set using for loop

`for in` loop is used to iterate each element in a set.

``````var vowels = {'a','e','i','o','u'}
echo vowels
for vowel in vowels :
echo vowel
``````

Output:

``````a
e
i
o
u
``````

## Nim Set supports mathematical operations

The set supports the following mathematical operations

• union: the union of two sets. set1 + set2
• intersection: the intersection of two sets.set1 * set2
• Difference: the difference between two sets. set1 - set2
• Equal : set1 == set2

Another incl and excl procedure on sets

``````var vowels = {'a','e','i','o','u'}
echo vowels
incl(vowels,'A')
echo vowels
excl(vowels,'A')
echo vowels
``````

Output:

``````{'a', 'e', 'i', 'o', 'u'}
{'A', 'a', 'e', 'i', 'o', 'u'}
{'a', 'e', 'i', 'o', 'u'}
``````

## Length of a set in nim

card(set) returns the cardinality of a set ie number of elements.

Here is a set length example

``````var vowels = {'a','e','i','o','u'}
echo vowels
echo card(vowels) #5
``````