Сравните разницу между двумя списками <string>

Я пытаюсь проверить разницу между двумя List<string> в c#.

Пример:

List<string> FirstList = new List<string>();
List<string> SecondList = new List<string>();

FirstList заполняется следующими значениями:

FirstList.Add("COM1");
FirstList.Add("COM2");

SecondList заполняется следующими значениями:

SecondList.Add("COM1");
SecondList.Add("COM2");
SecondList.Add("COM3");

Теперь я хочу проверить, равны ли значения в SecondList значениям в FirstList.

Если есть равные значения, такие как: COM1 и COM2, которые находятся в обоих списках, затем отфильтруйте их из списка и добавьте оставшиеся значения в другой список.

Итак, если бы я создал новый ThirdList, он будет заполнен только "COM3", потому что другие значения являются дубликатами.

Как я могу создать такую ​​проверку?

Ответы

Ответ 1

Попробуйте использовать Except метод расширения LINQ, который берет элементы только из первого списка, которые отсутствуют во втором. Пример приведен ниже:

List<string> ThirdList =  SecondList.Except(FirstList).ToList();

Вы можете распечатать результат, используя следующий код:

Console.WriteLine(string.Join(Environment.NewLine, ThirdList));

или

Debug.WriteLine(string.Join(Environment.NewLine, ThirdList));

Примечание. Не забудьте включить: using System.Diagnostics;

печатает:

COM3

Ответ 2

Вы можете использовать Enumerable.Intersect:

var inBoth = FirstList.Intersect(SecondList);

или для обнаружения строк, которые находятся только в одном из двух списков, Enumerable.Except:

var inFirstOnly = FirstList.Except(SecondList);
var inSecondOnly = SecondList.Except(FirstList);

Чтобы получить ThirdList:

List<string> ThirdList = inSecondOnly.ToList();

Ответ 3

Чем для этого короля reuqirement вы можете использовать функцию Except.

List<string> newlist =  List1.Except(List2).ToList();

или вы можете сделать это, поэтому ниже создайте новый список три, который содержит элементы, которые не являются общими для list1 и list2

var common = List1.Intersect(List2);

var list3 = List1.Except(common ).ToList();
list3.AddRange(List2.Except(common ).ToList());

приведенная выше помощь полна, когда list1 и list2 имеют отличительный элемент, например

List<string> list1= new List<string>();
List<string> list2 = new List<string>();

FirstList заполняется следующими значениями:

list1.Add("COM1");
list1.Add("COM2");
list1.Add("COM4");

Второй список заполняется следующими значениями:

list2 .Add("COM1");
list2 .Add("COM2");
list2 .Add("COM3");

используя приведенный выше код list3 contains COM4 and COM3.