Сравните разницу между двумя списками <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.