Подтвердить что ты не робот

Сравнение двух списков и возврат отдельных значений и различий

У меня есть два списка:

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

4b9b3361

Ответ 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)