# Множества

Здесь описаны операторы и функции для работы с массивом логических значений (тип **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*.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://ru.gentee.org/stdlib/sets.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
