比较两个列表<string>之间的差异

Max*_*Max 15 c# compare list visual-studio

我'尝试检查两者之间的差别List<string>c#.

例:

List<string> FirstList = new List<string>();
List<string> SecondList = new List<string>();
Run Code Online (Sandbox Code Playgroud)

FirstList充满了以下值:

FirstList.Add("COM1");
FirstList.Add("COM2");
Run Code Online (Sandbox Code Playgroud)

SecondList充满了以下值:

SecondList.Add("COM1");
SecondList.Add("COM2");
SecondList.Add("COM3");
Run Code Online (Sandbox Code Playgroud)

现在我想检查一下中的某些值SecondList是否等于中的值FirstList.

如果有相同的值,例如:COM1和COM2,它们在两个列表中,则从列表中过滤它们,并将其余值添加到另一个列表中.

因此,如果我要创建一个新的ThirdList,它将仅填充"COM3",因为其他值是重复的.

我怎样才能创建这样的支票?

Ily*_*nov 39

尝试使用 LINQ扩展方法,该方法仅从第一个列表中获取第二个中不存在的项目.示例如下:

List<string> ThirdList =  SecondList.Except(FirstList).ToList();
Run Code Online (Sandbox Code Playgroud)

您可以使用以下代码打印结果:

Console.WriteLine(string.Join(Environment.NewLine, ThirdList));
Run Code Online (Sandbox Code Playgroud)

要么

Debug.WriteLine(string.Join(Environment.NewLine, ThirdList));
Run Code Online (Sandbox Code Playgroud)

注意:不要忘记包括: using System.Diagnostics;

打印:

COM3
Run Code Online (Sandbox Code Playgroud)

  • 请注意,这是列表之间的Set差异.如果list1有两个副本"COM1"并且list2有三个副本"COM1",这不会告诉你 (2认同)

Tim*_*ter 16

你可以使用Enumerable.Intersect:

var inBoth = FirstList.Intersect(SecondList);
Run Code Online (Sandbox Code Playgroud)

或者检测仅在两个列表中的一个列表中的字符串Enumerable.Except:

var inFirstOnly = FirstList.Except(SecondList);
var inSecondOnly = SecondList.Except(FirstList);
Run Code Online (Sandbox Code Playgroud)

得到你的ThirdList:

List<string> ThirdList = inSecondOnly.ToList();
Run Code Online (Sandbox Code Playgroud)


Pra*_*ana 5

对于这个要求之王,你可以利用Except功能.

List<string> newlist =  List1.Except(List2).ToList();
Run Code Online (Sandbox Code Playgroud)

或者你可以这样做,所以下面的一个创建新的列表3,其中包含list1和list2中不常见的项目

var common = List1.Intersect(List2);

var list3 = List1.Except(common ).ToList();
list3.AddRange(List2.Except(common ).ToList());
Run Code Online (Sandbox Code Playgroud)

当list1和list2有不同的项目时,上面的帮助是完整的

List<string> list1= new List<string>();
List<string> list2 = new List<string>();
Run Code Online (Sandbox Code Playgroud)

FirstList填充以下值:

list1.Add("COM1");
list1.Add("COM2");
list1.Add("COM4");
Run Code Online (Sandbox Code Playgroud)

SecondList填充以下值:

list2 .Add("COM1");
list2 .Add("COM2");
list2 .Add("COM3");
Run Code Online (Sandbox Code Playgroud)

通过使用上面的代码 list3 contains COM4 and COM3.