Как сравнить два списка и выдать результат в виде третьего списка?
Есть некий объект (назовём его 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#, моя благодарность не будет иметь границ.