Сравнение двух списков и возврат отдельных значений и различий
У меня есть два списка:
List A {A, B, C, D}
List B {A, E, F, G}
Мне нужно создать три списка:
Один с элементами только в списке A
(B, C, D)
Один с элементами только в списке B
(E, F, G)
Один с элементами в
(А)
Учитывая, что списки на самом деле являются разделами реестра, их может быть огромное количество, поэтому я могу предвидеть огромные накладные расходы на производительность, если я предпочитаю использовать традиционные методы ForEach или For (int i...).
Я не прочь от них, если они будут делать работу эффективно, но я бы предпочел использовать Linq.
У кого-нибудь есть идеи?
Мне не нужны идентичные записи.
Я уже создал класс IEquatable<>
, который будет сравнивать элементы, но это как использовать это для создания моих необходимых результатов, с которыми я борюсь.
Спасибо заранее.
Кстати, я использую VS2012 с .NET 4.5
Ответы
Ответ 1
var A = new List<string>() { "A", "B", "C", "D" };
var B = new List<string>() { "A", "E", "F", "G" };
A.Except(B).ToList()
// outputs List<string>(2) { "B", "C", "D" }
B.Except(A).ToList()
// outputs List<string>(2) { "E", "F", "G" }
B.Intersect(A).ToList()
// outputs List<string>(2) { "A" }
Ответ 2
Использование LINQ
listA.Except(listB)
Это даст вам все элементы в списке A, которые не находятся в спискеB.
Для похожих
listA.SequenceEqual(listB)