# Sets

## Create a set from a sequence

### Problem

You have an existing sequence and you want to create a set from it.

### Solution

```
import sets
let a = @[2, 3, 5, 4, 4, 5, 2]
let b = a.toSet()
echo b
```

```
{2, 3, 4, 5}
```

## Check if a value is in the set

### Problem

You want to check if some value is in the set.

### Solution

```
import sets
let a = [3, 5, 7, 9].toSet()
echo a.contains(10)
echo 5 in a
echo 30 notin a
```

```
false
true
true
```

## Add/remove value from a set

### Problem

You want to add or remove some value to/from the existing set.

### Solution

```
import sets
var a = [2, 3, 4, 5].toSet()
a.incl(1)
a.excl(5)
echo a
```

```
{1, 2, 3, 4}
```

## Operations on two sets

### Problem

You want to add two sets together (union).

### Solution

```
import sets
let
a = [1, 2, 3, 4, 5].toSet()
b = [3, 4, 5, 6, 7].toSet()
echo union(a, b)
echo a + b
```

```
{1, 2, 3, 4, 5, 6, 7}
{1, 2, 3, 4, 5, 6, 7}
```

### Problem

You want to get the intersection of two sets.

### Solution

```
echo intersection(a, b)
echo a * b
```

```
{3, 4, 5}
{3, 4, 5}
```

### Problem

You want to get the difference of two sets.

### Solution

```
echo difference(a, b)
echo a - b
echo difference(b, a)
echo b - a
```

```
{1, 2}
{1, 2}
{6, 7}
{6, 7}
```

Note: difference is non-commutative.

### Problem

You want to get the elements which are in either of two sets, but not in both (symmetric difference).

### Solution

```
echo symmetricDifference(a, b)
echo a -+- b
```

```
{1, 2, 6, 7}
{1, 2, 6, 7}
```