Как сравнить два списка и выдать результат в виде третьего списка?

Есть некий объект (назовём его Line) описывающий некие данные, обязательное поле у которого ID (Сразу сообщу, что ID - не уникальный и две структуры в списке могут иметь одинаковый ID), и другие поля могут отличаться, но структуры считаются похожими (не совпадающими), если у них одинаковый ID.

Есть два списка:

var List1 = new List<Line>();
var List2 = new List<Line>();

Элементы в этом списке могут повторяться, а ID могут идти не последовательно. Мне нужно сравнить эти два списка по полям ID и сформировать результирующий список следующей структуры:

Line first;
Line second;

где в полях first и second лежат элементы из первого и второго списка соответственно, в случае совпадения ID этих записей, а если элемент присутствует в первом списке, но отсутствует во втором (и наоборот), отсутствующее поле содержало бы null.

Например. Line содержит структуру:

int ID;
int value;

Списки инициировали следующими данными:

List1 = {5, 5}, {5, 1}, {7, 7}, {3, 3}, {5, 5}, {6, 6}, {2, 2}, {9, 9}, {1, 1}, {1, 5};
List2 = {5, 5}, {7, 7}, {5, 1}, {3, 3}, {4, 4}, {5, 5}, {6, 6}, {2, 2}, {1, 1}, {1, 3};

На выходе нужно получить следующую структуру данных:

ListRet = {
    {{5, 5}, {5, 5}}, {{5, 1}, null}, {{7, 7}, {7, 7}}, {null, {5, 1}}, 
    {{3, 3}, {3, 3}}, {null, {4, 4}}, {{5, 5}, {5, 5}}, {{6, 6}, {6, 6}}, 
    {{2, 2}, {2, 2}}, {{9, 9}, null}, {{1, 1}, {1, 1}}, {{1, 5}, {1, 3}}
};

Последовательность элементов важна

Подскажите, как можно реализовать подобный алгоритм? А если приведёте кусок кода на C#, моя благодарность не будет иметь границ.


Ответы (0 шт):