Programming Taskbook 0


Download 1.62 Mb.
Pdf ko'rish
bet51/71
Sana21.06.2023
Hajmi1.62 Mb.
#1644761
TuriУчебное пособие
1   ...   47   48   49   50   51   52   53   54   ...   71
Bog'liq
Abramyan-Pascal2016-1


Глава 4. Запросы 
83 
зуя запрос GroupJoin. Задача немного упрощается благодаря тому, что пу-
стые последовательности, полученные в результате объединения, не по-
требуется обрабатывать особым образом: при применении к таким после-
довательностям запроса Sum мы получим нужное по условию значение 0. 
В задаче требуется выполнить сортировку полученных данных по 
набору ключей, поэтому результат объединения удобно представить в виде 
кортежа, из которого будет легко извлекать ключи сортировки. Отсорти-
рованную последовательность кортежей останется преобразовать в после-
довательность строк с помощью запроса Select: 
Task('LinqBegin51');
var a := ReadSeqInteger;
a.GroupJoin(ReadSeqInteger, e1 -> e1 mod 10, e2 -> e2 mod 10,
(e1, e2) -> (e1, e2.Sum)) 
.OrderBy(e -> e[1]).ThenByDescending(e -> e[0]) 
.Select(e -> e[1] + ':' + e[0]).WriteAll; 
Обратите внимание на способ получения результирующей строки в 
запросе Select: достаточно применить операцию + к числовым полям кор-
тежа и разделителю «:» (двоеточие), при этом числовые поля будут авто-
матически преобразованы к своим строковым представлениям. Здесь ис-
пользуется следующее правило PascalABC.NET для операции +: если один 
ее операнд является строкой (или символом), то другой операнд преобра-
зуется в свое строковое представление и операция + выполняет сцепление 
полученных строк
В задаче LinqBegin53 также даны две целочисленные последователь-
ности. Требуется получить последовательность различных сумм, в которых 
первое слагаемое берется из первой последовательности, а второе — из 
второй. Полученную последовательность надо упорядочить по возраста-
нию: 
Task('LinqBegin53');
var a := ReadSeqInteger;
a.Cartesian(ReadSeqInteger, (e1, e2) -> e1 + e2) 
.Distinct.Order.WriteAll; 
В этой задаче надо вначале построить суммы всевозможных комбина-
ций пар элементов исходных последовательностей, затем отбросить повто-
ряющиеся значения, после чего отсортировать оставшиеся (различные) 
значения по возрастанию. Для перебора всех комбинаций пар элементов 
проще всего использовать запрос Cartesian.
4.5.
Группировка 
В результате группировки исходная последовательность преобразуется 
в последовательность наборов (групп) элементов, обладающих некоторым 


84 
общим свойством. Полученные группы элементов обычно являются по-
следовательностями, поэтому можно сказать, что группировка преобразует 
исходную «плоскую» последовательность в иерархическуюэтом отно-
шении ее действие является обратным к действию запроса SelectMany). 
В стандартной библиотеке платформы .NET имеется один группиру-
ющий запрос GroupBy, реализованный в четырех вариантах. В библиотеку 
PascalABC.NET добавлено еще несколько специализированных запросов
которые можно отнести к категории группирующих.

Download 1.62 Mb.

Do'stlaringiz bilan baham:
1   ...   47   48   49   50   51   52   53   54   ...   71




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