Книга: Описание языка PascalABC.NET
Множества
Множества
Множество представляет собой набор элементов одного типа. Элементы множества считаются неупорядоченными; каждый элемент может входить во множество не более одного раза. Тип множества описывается следующим образом:
set of базовый тип
В качестве базового может быть любой тип, в том числе строковый и классовый.
Например:
type
ByteSet = setof byte;
StringSet = setof string;
Digits = setof '0'..'9';
SeasonSet = setof (Winter,Spring,Summer,Autumn);
PersonSet = set of Person;
Элементы базового типа сравниваются на равенство следующим образом: у простых типов, строк и указателей сравниваются значения, у структурированных и у классов - значения всех элементов или полей. Однако, если поля относятся к ссылочному типу, то сравниваются только их адреса (неглубокое сравнение).
Переменная типа множество может содержать несколько значений базового типа. Чтобы сконструировать значение типа множество, используется конструкция вида
[список значений]
где в списке могут перечисляться через запятую либо выражения базового типа, либо (для порядковых типов) их диапазоны в виде a..b, где a и b - выражения базового типа. Например:
var
bs: ByteSet := [1,3,5,20..25];
fios: StringSet := ['Иванов','Петров','Сидорова'];
Значения в списке могут отсутствовать, тогда множество является пустым:
bs:=[];
Пустое множество совместимо по присваиванию с множеством любого типа.
Для множеств имеет место структурная эквивалентность типов.
Множества целых и множества на базе типа и его диапазонного подтипа или на базе двух диапазонных типов одного базового типа неявно преобразуются друг к другу. Если при присваивании s := s1 во множестве s1 содержатся элементы, которые не входят в диапазон значений базового типа для множества s, то они отсекаются.
Например:
var st: setof 3..9;
...
st := [1..5,8,10,12]; // в st попадут значения [3..5,8]
Операция in проверяет принадлежность элемента множеству:
if Wed in bestdays then ...
Для множеств определены операции + (объединение), - (разность), * (пересечение), = (равенство), <> (неравенство), <= (нестрогое вложение), < (строгое вложение), >= (нестрого содержит) и > (строго содержит).
Процедура write при выводе множества выводит все его элементы. Например,
write(['Иванов','Петров','Сидорова']);
выведет ['Иванов','Петров','Сидорова'], при этом данные, если это возможно, будут отсортированы по возрастанию.
Для перебора всех элементов множества можно использовать цикл foreach, данные перебираются в некотором внутреннем порядке:
foreach s: string in fios do
write(s,' ');
Для добавления элемента x к множеству s используется конструкция s += [x] или стандартная процедура Include: Include(s,x). Для удаления элемента x из множества s используется конструкция s -= [x] или стандартная процедура Exclude: Exclude(s,x).
- Обзор типов
- Список типов .NET
- Размерные и ссылочные типы
- Целые типы
- Вещественные типы
- Логический тип
- Символьный тип
- Перечислимый и диапазонный типы
- Строковый тип
- Массивы
- Статические массивы
- Динамические массивы
- Указатели
- Последовательности
- Записи
- Множества
- Процедурный тип
- Файловые типы
- Эквивалентность и совместимость типов
- Отображение на типы .NET
- Операции с множествами узлов
- Использование возможностей множества транзакций
- Множества объектов kset
- Этап 6 - выделение множества дизъюнктов
- 9.1. Множества
- 9.1.1. Простые операции над множествами
- 9.6.1. Пример: класс множества
- Получение множества наборов результатов с помощью объектов чтения данных
- 2.1.3. Подмножества модели и сохраняемые отображения
- Операции над множествами
- 11.3.1. Списковое представление множества кандидатов
- 11.3.2. Древовидное представление множества кандидатов