Перейти к основному содержимому

Множество

Множество — это коллекция, которая содержит только уникальные элементы. Порядок обхода элементов соответствует порядку добавления элементов в множество. Множество позволяет хранить элементы произвольных типов.

Изменяемые и неизменяемые множества

Множества делятся на два вида:

  • В неизменяемом, или фиксированном, множестве нельзя менять, добавлять или удалять элементы. Для описания неизменяемого множества в языке используется тип ЧитаемоеМножество<ТипЭлемента>.
  • В изменяемом, или обычном, множестве, поддерживается изменение значений элементов множества. Для описания изменяемого множества в языке используется тип Множество<ТипЭлемента>.

Создание множества

Вы можете создать пустое множество или заполнить его данными, указав нужные элементы в фигурных скобках {}. Данные инициализации могут содержать повторяющиеся значения. Они будут отброшены без отображения ошибки.

знч ПустоеМножество = <Число>{}
знч МножествоЧисел = {1, 2, 3}
знч МножествоКопия = новый Множество<Число>(МножествоЧисел)
знч МножествоОбъектов = <Объект>{1, 2, "Строка", Истина}

Вы также можете быстро создать множество из массива с помощью метода ВоМножество():

знч МассивЧисел = [1, 3, 5, 7, 9, 1, 3, 5]
знч МножествоЧисел = МассивЧисел.ВоМножество() // {1, 3, 5, 7, 9}

Операции над множествами

Важной особенностью множеств является возможность выполнять над ними специальные операции, которые перечислены ниже.

Проверка на равенство

Два множества являются равными, если равны их размеры и каждый элемент первого множества содержится во втором множестве. Допускается сравнивать значения типа Множество<ТипЭлемента> и ЧитаемоеМножество<ТипЭлемента>.

знч ОбычноеМножество = {1, 2, 3}
знч ЧитаемоеМножество: ЧитаемоеМножество<Объект> = {3, 2, 1}

знч Равны = ОбычноеМножество == ЧитаемоеМножество // Истина

Объединение множеств

Выполняется с помощью метода Объединение(). В результате формируется множество, которое содержит все уникальные значения двух исходных множеств.

знч Множество1 = {1, 2, 3, 4}
знч Множество2 = {3, 4, 5, 6}
знч ОбъединениеМножеств = Множество1.Объединение(Множество2) // {1, 2, 3, 4, 5, 6}

Пересечение множеств

Выполняется с помощью метода Пересечение(). В результате формируется множество, содержащее только те элементы, которые присутствуют одновременно в обоих множествах.

знч Множество1 = {1, 2, 3, 4}
знч Множество2 = {3, 4, 5, 6}
знч ПересечениеМножеств = Множество1.Пересечение(Множество2) // {3, 4}

Разность множеств

Выполняется с помощью методов Разность() и СимметрическаяРазность().

Простая разность формирует множество, содержащее только те элементы исходного множества, которые отсутствуют во множестве, указанном в качестве параметра метода.

знч Множество1 = {1, 2, 3, 4}
знч Множество2 = {3, 4, 5, 6}
знч РазностьМножеств = Множество1.Разность(Множество2) // {1, 2}

Симметрическая разность формирует множество, которое содержит элементы, уникальные в каждом множестве. Другими словами, результат работы метода СимметрическаяРазность() не включает в себя значения, которые есть одновременно в обоих множествах.

знч Множество1 = {1, 2, 3, 4}
знч Множество2 = {3, 4, 5, 6}
знч СимметрическаяРазностьМножеств = Множество1.СимметрическаяРазность(Множество2) // {1, 2, 5, 6}

Обход элементов множества

Для обхода множества используйте цикл для из. Доступ к элементам с помощью функционального способа или операции доступа по индексу [] не поддерживается.

В цикле обхода множества не допускается изменение его состава. При попытке такого изменения будет выброшено исключение.

Ниже приведен пример обхода множества, содержащего значения разных типов.

метод ОбойтиМножество(Множество: ЧитаемоеМножество<Булево|Число|Строка|Массив<Число>>): Массив<Строка>
знч ЭлементыМножества: Массив<Строка> = []

для Элемент из Множество
ЭлементыМножества.Добавить("Значение: ${Элемент}, тип: ${Элемент.ПолучитьТип()}")
;

возврат ЭлементыМножества
;

метод ВыполнитьОбход()
знч Результат = ОбойтиМножество({1, "2", Истина, [1, 2, 3]})
;

В результате выполнения примера вернется массив, содержащий следующие элементы:

[0]: "Значение: 1, тип: Number"
[1]: "Значение: 2, тип: String"
[2]: "Значение: Истина, тип: Boolean"
[3]: "Значение: [1, 2, 3], тип: Array<Number>"