> For the complete documentation index, see [llms.txt](https://ru.gentee.org/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://ru.gentee.org/stdlib/sets.md).

# Множества

Здесь описаны операторы и функции для работы с массивом логических значений (тип **set**).

* [arr( set s ) arr.int](/stdlib/sets.md#arr-set-s-arr-int)
* [set( arr.int a ) set](/stdlib/sets.md#set-arr-int-a-set)
* [set( str s ) set](/stdlib/sets.md#set-str-s-set)
* [str( set s ) str](/stdlib/sets.md#str-set-s-str)
* [Set( set s, int index ) set](/stdlib/sets.md#set-set-s-int-index-set)
* [Toggle( set s, int index ) bool](/stdlib/sets.md#toggle-set-s-int-index-bool)
* [UnSet( set s, int index ) set](/stdlib/sets.md#unset-set-s-int-index-set)

## Операторы

| Оператор             | Результат | Описание                                                                                                           |
| -------------------- | --------- | ------------------------------------------------------------------------------------------------------------------ |
| **\*** set           | int       | Возвращает размер массива.                                                                                         |
| **^** set            | set       | Возвращает новое множество, которое обратно указанному. *!s\[i]* для каждого элемента.                             |
| set **=** set        | set       | Оператор присваивания.                                                                                             |
| set **&=** set       | set       | Создает клон множества. Новая переменная будет работать с тем же набором данных.                                   |
| set **+=** set       | set       | Добавить значение одного множества к другому.                                                                      |
| set **&** set        | set       | Возвращает множество, которое является пересечением двух множеств. *left\[i] && right\[i]* для каждого элемента.   |
| set **\|** set       | set       | Возвращает множество, которое является объединением двух множеств. *left\[i] \|\| right\[i]* для каждого элемента. |
| set **\[** int **]** | bool      | Установить/получить элемент множества.                                                                             |

## Функции

### arr(set s) arr.int

Функция *arr* конвертирует множество *set* в массив целых чисел, который содержит индексы элементов множества.

### set(str s) set

Функция *set* конвертирует строку в множество *set* и возвращает его. Строка должна содержать только символы 1 и 0.

### set(arr.int a) set

Функция *set* конвертирует массив целых чисел в множество *set* и возвращает его. Результирующее множество будет иметь элементы с соответствующими индексами.

```
run arr.int {
  set s &= {780, 99, 128, 105, 136}
  arr.int as = arr(s)
  as += 330
  s &= set(as)
  return arr(s) // [99 105 128 136 330 780]
}
```

### str(set s) str

Функция *str* конвертирует множество в строку и возвращает её. Результирующая строка содержит только символы 1 и 0.

### Set(set s, int index) set

Функция *Set* добавляет элемент к множеству. Эквивалентно *s\[index] = true*. Функция возвращает *s*.

### Toggle(set s, int index) bool

Функция *Toggle* добавляет элемент множеству, если его не существует, в противном случае, элемент удаляется. Эквивалентно *s\[index] = !s\[index]*. Функция возвращает предыдущее состояние - *true*, если элемент существовал и *false* в противном случае.

### UnSet(set s, int index) set

Функция *UnSet* удаляет элемент из множества. Эквивалентно *s\[index] = false*. Функция возвращает *s*.
