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

时间:2013-03-25 10:02:58

标签: c# visual-studio list compare

我正试图检查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”填充,因为其他值是重复的。

我该如何制作这样的支票?

3 个答案:

答案 0 :(得分:38)

尝试使用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

答案 1 :(得分:16)

您可以使用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();

答案 2 :(得分:5)

对于这个要求之王,您可以使用Except功能。

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

或者你可以这样做,所以下面的一个创建新的列表3,其中包含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");

SecondList填充了以下值:

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

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