Метод GroupJoin
Описание методов
Методы приведены для последовательности sequence of T
.
function GroupJoin<TInner,Key,Res>(inner: sequence of TInner; outerKeySelector: T->Key; innerKeySelector: TInner->TKey; resultSelector: (T,sequence of TInner)->Res): sequence of Res;
Объединяет две последовательности на основе равенства ключей и группирует результаты. Затем функция resultSelector проектирует ключ и последовательность соответствующих ему значений на элемент результирующей последовательности.
|
function GroupJoin<TInner,Key,Res>(inner: sequence of TInner; outerKeySelector: T->Key; innerKeySelector: TInner->TKey; resultSelector: (T,sequence of TInner)->Res; comparer: IEqualityComparer<Key>): sequence of Res;
Объединяет две последовательности на основе равенства ключей и группирует результаты. Для сравнения ключей используется указанный компаратор. Затем функция resultSelector проектирует ключ и последовательность соответствующих ему значений на элемент результирующей последовательности. |
Пример
begin
var
people := Arr((1,'Иванов'),(2,'Попов'),(3,'Сидоров'));
var
subjects := Arr((1,'История'),(1,'Математика'),(2,'История')
,(3,'Математика'),(1,'Русский'),(2,'Физика'));
people.GroupJoin(subjects,p->p[0],s->s[0],(p,ss)->(p[1],ss.Select(x->x[1]))).Println(NewLine);
end.
Вывод:
(Иванов,[История,Математика,Русский])
(Попов,[История,Физика])
(Сидоров,[Математика])