Programming Taskbook 0
Download 1.62 Mb. Pdf ko'rish
|
Abramyan-Pascal2016-1
- Bu sahifa navigatsiya:
- LinqBegin1
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)); |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling