PascalABC.NET

Метод 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.

Вывод:
(Иванов,[История,Математика,Русский])
(Попов,[История,Физика])
(Сидоров,[Математика])