Programming Taskbook 0


Download 1.62 Mb.
Pdf ko'rish
bet48/71
Sana21.06.2023
Hajmi1.62 Mb.
#1644761
TuriУчебное пособие
1   ...   44   45   46   47   48   49   50   51   ...   71
Bog'liq
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); 
Выполним внутреннее объединение этих последовательностей, ис-
пользуя в качестве ключа разряд единиц (т. е. цифру, которой оканчивает-


Download 1.62 Mb.

Do'stlaringiz bilan baham:
1   ...   44   45   46   47   48   49   50   51   ...   71




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