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