Programming Taskbook 0


Download 1.62 Mb.
Pdf ko'rish
bet39/71
Sana21.06.2023
Hajmi1.62 Mb.
#1644761
TuriУчебное пособие
1   ...   35   36   37   38   39   40   41   42   ...   71
Bog'liq
Abramyan-Pascal2016-1

Aggregate(agg: (T, T) -> T): T 
Aggregate(seed: TRes; agg: (TRes, T) -> TRes): TRes 
Aggregate(seed: TAcc; agg: (TAcc, T) -> TAcc;
finalSel: TAcc -> TRes): TRes 
Запрос Count возвращает размер последовательности (или количество 
элементов, удовлетворяющих предикату pred, если он указан). Имеется 
также вариант этого запроса — запрос LongCount, возвращающий значение 
типа int64. Тип int64 — это целочисленный тип размера 8 байт, позволяю-
щий хранить очень большие целые числа: от –2
63
(= –9223372036854775808) 
до 2
63 
– 1 (= 9223372036854775807).
Запросы Average, Sum, Min и Max находят соответственно среднее 
арифметическое, сумму, минимум и максимум элементов последователь-
ности или, при наличии лямбда-выражения sel (селектора), тех значений, в 
которые эти элементы преобразуются указанным селектором. Запросы
Average и Sum возбуждают исключение, если вызываются без указания се-
лектора для нечисловых последовательностей. Запросы Min и Max возбуж-
дают исключение, если вызываются для обработки данных, для которых не 
определены операции отношения «меньше»–«больше». В случае пустых 
последовательностей запрос Sum возвращает нулевое значение, а запросы 
Average, Min и Max возбуждают исключение.
Запросы MaxBy и MinBy возвращают первый из элементов последова-
тельности с максимальной или, соответственно, минимальной характери-
стикой (ключом), вычисляемой с помощью параметра-селектора sel. Запро-
сы LastMaxBy и LastMinBy отличаются от MaxBy и MinBy тем, что возвращают 
последний из элементов последовательности с максимальным или мини-
мальным ключом. Важно понимать отличие этих запросов от запросов Max 
и Min с аналогичным параметром-селектором: запросы Max и Min возвра-
щают максимальный или минимальный ключ, тогда как запросы MaxBy, 
MinBy, LastMaxBy и LastMinBy возвращают элемент последовательности, со-
ответствующий максимальному или минимальному ключу. 
Запрос JoinIntoString возвращает строковое представление последова-
тельности, которое формируется следующим образом: все элементы по-
следовательности преобразуются к их стандартному строковому представ-
лению, а между ними вставляется разделитель delim. Если параметр delim 
отсутствует, то он считается равным пробелу (за исключением случая, ко-
гда элементы последовательности имеют тип char; в этом случае отсут-
ствующий параметр delim считается пустой строкой). Следует подчерк-


64 
нуть, что запрос JoinIntoString можно применять к последовательностям лю-
бого типа, так как в PascalABC.NET для любого типа определен метод 
ToString, преобразующий значения этого типа в их строковое представле-
ние. 
Запрос Aggregate позволяет определять новые операции агрегирования. 
Он реализован в трех вариантах. В каждом из них присутствует лямбда-
выражение agg, определяющее агрегирующее действие. Его первый пара-
метр является аккумулятором, накапливающим результат, а второй пара-
метр содержит аккумулируемое значение (т. е. значение, которое должно 
добавляться к аккумулятору). Варианты запроса отличаются дополнитель-
ными действиями, связанными с заданием аккумулятора.
В простейшем случае, когда лямбда-выражение agg является един-
ственным параметром, оно обрабатывает (аккумулирует) все элементы по-
следовательности, начиная со второго, а первый элемент последовательно-
сти используется в качестве начального значения аккумулятора.
Если дополнительно указывается параметр seed, то он используется в 
качестве начального значения аккумулятора, а лямбда-выражение agg об-
рабатывает все элементы последовательности, начиная с первого.
Если дополнительно указывается лямбда-выражение finalSel (финаль-
ный селектор), то после нахождения аккумулятора он передается этому 
селектору, который преобразует значение аккумулятора в результат, воз-
вращаемый запросом.
Проиллюстрируем использование описанных запросов на примерах 
выполнения некоторых заданий из группы LinqBegin электронного задач-
ника Programming Taskbook. Эта группа посвящена знакомству со стан-
дартными запросами, поэтому ее название содержит аббревиатуру LINQ 
(Language Integrated Query, т. е. «запрос, интегрированный в язык») — 
название технологии, позволяющей использовать в языках платформы 
.NET последовательности и запросы. Поскольку в данном пособии не об-
суждаются вопросы, связанные с обработкой текстовых данных, будем ис-
пользовать только те задачи, в которых даются числовые последовательно-
сти. 
В задаче LinqBegin1 требуется вывести первый положительный и
последний отрицательный элементы целочисленной последовательности 
(предполагается, что последовательность обязательно содержит как поло-
жительные, так и отрицательные элементы): 
Task('LinqBegin1');
var a := ReadSeqInteger; 
Write(a.First(e -> e > 0), a.Last(e -> e < 0)); 


Download 1.62 Mb.

Do'stlaringiz bilan baham:
1   ...   35   36   37   38   39   40   41   42   ...   71




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling