У меня есть этот класс: .NET Framework 3.5
Сравните два списка классов в C#
Class my_class {
string name;
int val_1;
int val_2;
.
.
.
int val_n;
}
И у меня есть следующие списки:
List<my_class> list1;
List<my_class> list2;
List<my_class> result1;
List<my_class> result2;
List<my_class> resultEdit;
Оба list1
и list2
могут содержать более 500K в 1 миллион объект.
result1
список должен содержать объекты, которые существуют на list1
и не существует на list2
.
result2
список должен содержать объекты, которые существуют на list2
и не существует на list1
.
resultEdit
должны содержать объект, которые существуют на обоих list1
и в list2
, но один из val_1
, val_2
, ... val_n
различны между list1
и list2
.
Пример:
List1 = { {"A",1,2,3,4} , {"B",1,2,3,4}, {"C",1,2,3,4} };
List1 = { {"A",1,2,3,4} , {"D",1,2,3,4}, {"C",1,4,3,4} };
Результаты должны быть:
result1 = {{"B",1,2,3,4}};
result2 = {{"D",1,2,3,4}};
resultEdit1 = {{"C",1,2,3,4}};
Я знаю, что есть много способов сделать это, но с большим количеством элементов в каждом списке (более 500K в каждом списке) время процесса не очень хорошо!
Итак, любой хороший, быстрый способ достичь этого?
Примечание: Время обработки так важно для меня, и памяти также
Это уникально, тогда HashSet очевидная альтернатива, обеспечивает амортизированный доступ O (1) и O (n) для операций с множеством. Если поддержание порядка важно, вам также необходимо сохранить в нем список. –
Если стандартный «Enumerable.Except» с компаратором не работает для вас (я предполагаю, что, как вы сказали, вы не можете достичь желаемой цели с регулярной реализацией), тогда ваш вопрос может быть слишком широким для SO и, возможно, по теме на одном из других более теоретических сайтов SE. –
So что ты уже испробовал? –