Книга: Описание языка 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>.

Стандартные функции и методы

Для последовательностей доступны многочисленные методы обработки последовательностей.

Для последовательностей доступны также стандартные функции обработки последовательностей.

Оглавление книги


Генерация: 0.088. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз