Programming Taskbook 0
Download 1.62 Mb. Pdf ko'rish
|
Abramyan-Pascal2016-1
Объединение
Методы sequence of T1 Join(a2: sequence of T2; keySel1: T1 -> TKey; keySel2: T2 -> TKey, finalSel: (T1, T2) -> TRes): sequence of TRes GroupJoin(a2: sequence of T2; keySel1: T1 -> TKey; keySel2: T2 -> TKey, finalSel: (T1, sequence of T2) -> TRes): sequence of TRes * Cartesian(a2: sequence of T2): sequence of (T1, T2) * Cartesian(a2: sequence of T2; func: (T1, T2) -> TRes): sequence of TRes Zip(a2: sequence of T2; func: (T1, T2) -> TRes): sequence of TRes * ZipTuple(a2: sequence of T2): sequence of (T1, T2) 78 * ZipTuple(a2: sequence of T2; a3: sequence of T3): sequence of (T1, T2, T3) * ZipTuple(a2: sequence of T2; a3: sequence of T3; a4: sequence of T4): sequence of (T1, T2, T3, T4) В запросах Join и GroupJoin используются две последовательности: первая (внешняя) вызывает данные запросы, вторая (внутренняя) указыва- ется в качестве их первого параметра a2. Типы элементов у внешней и внутренней последовательностей могут быть различными (выше, в заго- ловках запросов они обозначены через T1 и T2 соответственно). Запрос Join выполняет внутреннее объединение двух последовательно- стей по ключу. Ключи определяются первыми двумя лямбда-выражениями — селекторами ключей keySel1 и keySel2; к каждой паре элементов внеш- ней и внутренней последовательности, имеющих одинаковые ключи, при- меняется третье лямбда-выражение — финальный селектор finalSel, и его результат заносится в выходную последовательность. Объединение назы- вается внутренним, потому что учитываются только те элементы внешней последовательности, для которых найден хотя бы один элемент внутрен- ней последовательности с таким же ключом. Метод GroupJoin тоже выполняет объединение двух последовательно- стей по ключу, однако результирующий элемент определяется по элементу внешней последовательности и всем элементам внутренней последова- тельности с тем же ключом. Такое объединение называется левым внеш- ним; в нем любой элемент из внешней («левой») последовательности при- мет участие в формировании выходной последовательности, даже если для него не найдется «парных» элементов из второй последовательности. Об- ратите внимание на то, что вторым параметром финального селектора fi- nalSel для метода GroupJoin является последовательность (sequence of T2): это последовательность тех элементов исходной внутренней последова- тельности, ключ которых совпадает с ключом первого параметра селектора finalSel (элемента внешней последовательности). В полученной последовательности порядок элементов определяется порядком элементов внешней последовательности, а для элементов, по- строенных по одному и тому же элементу внешней последовательности, — порядком элементов внутренней последовательности. Рассмотрим пример. Пусть исходные последовательности определены следующим образом: var a1 := Seq(10, 21, 33, 84); var a2 := Seq(40, 51, 52, 53, 60); Выполним внутреннее объединение этих последовательностей, ис- пользуя в качестве ключа разряд единиц (т. е. цифру, которой оканчивает- |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling