Книга: Описание языка PascalABC.NET
Последовательности
Разделы на этой странице:
Последовательности
Последовательность - это набор данных, которые можно перебрать один за другим в некотором порядке. К разновидностям последовательностей относятся одномерные динамические массивы array of T, списки List<T>, двусвязные списки LinkedList<T>, множества HashSet<T> и SortedSet<T>.
Тип последовательности конструируется следующим образом:
sequenceof тип элементов
Последовательности доступны только на чтение. Если требуется изменить последовательность, то генерируется и возвращается новая последовательность.
Тип sequence of T является синонимом типа .NET System.Collections.Generic.IEnumerable<T>, а последовательность - синонимом объекта типа, поддерживающего интерфейс System.Collections.Generic.IEnumerable<T>.
Инициализация последовательности
Последовательность инициализируется с помощью стандартных функций Seq, SeqGen, SeqFill, SeqWhile, SeqRandom, SeqRandomReal, ReadSeqInteger, ReadSeqReal, ReadSeqString. Например:
var s: sequenceof integer;
s := Seq(1,3,5);
s.Println;
s := SeqGen(1,x->x*2,10);
writeln(s);
Хранение последовательности
Последовательность не хранится целиком в памяти. Элементы последовательности генерируются алгоритмически и возвращаются по одному при обходе.
Таким образом, в коде
var s := SeqFill(1,10000000);
writeln(s.Sum());
основное время выполнения будет занимать вторая строка, а выполнение первой строки будет сводиться лишь к запоминанию алгоритма генерации последовательности в переменной s.
Соединение последовательностей
Две последовательности одного типа могут быть соединены операцией +, при этом вторая последовательность дописывается в конец первой. Например:
Seq(1,2,3) + Seq(5,6,7)
Seq(1,2,3) + Arr(5,6,7)
Кроме того, к последовательности некоторого типа можно присоединить операцией + значение этого типа как первый или последний элемент последовательности, например:
Seq(1,2,3) + 5
3 + Seq(5,6,7)
3 + Seq(5,6,7) + 9
Операция + является сокращённым вариантом операции Concat.
Цикл по последовательности
Элементы последовательности можно обойти с помощью цикла foreach:
foreach var x ins do
if x>2 then
Print(x);
Совместимость по присваиванию
Переменной типа последовательность с элементами типа T можно присвоить одномерный массив array of T, список List<T>, двусвязный список LinkedList<T>, множество HashSet<T> или SortedSet<T>, а также объект любого класса, поддерживающего интерфейс System.Collections.Generic.IEnumerable<T>.
Стандартные функции и методы
Для последовательностей доступны многочисленные методы обработки последовательностей.
Для последовательностей доступны также стандартные функции обработки последовательностей.
- Обзор типов
- Список типов .NET
- Размерные и ссылочные типы
- Целые типы
- Вещественные типы
- Логический тип
- Символьный тип
- Перечислимый и диапазонный типы
- Строковый тип
- Массивы
- Статические массивы
- Динамические массивы
- Указатели
- Последовательности
- Записи
- Множества
- Процедурный тип
- Файловые типы
- Эквивалентность и совместимость типов
- Отображение на типы .NET
- Диаграммы последовательности действий
- Последовательности команд
- 10.4.3. Диаграммы последовательности
- 4.23.3. Запуск измерительной последовательности от внешнего сигнала
- Диаграммы последовательности действий и граничные классы
- Числовые последовательности
- Последовательности кодирования
- Глава 31. Секрет на миллион долларов: Сила последовательности
- Последовательности сортировки
- Последовательности страниц и нумерация страниц
- 10.3.2 Поля портов, последовательности и ACK в заголовке TCP
- 13.7.1 Важные управляющие последовательности