比较两个list<string>之间的差异。

20

我正在尝试检查中两个List<string>之间的差异。

示例:

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个回答

43

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

谢谢,我没想到这个简单但是聪明的解决方案。它完美地工作了,当stackoverflow允许我这么做时,我会接受它作为我的答案:) - Max
3
请注意,这是列表之间的差集。这并不会告诉您如果list1中有两个"COM1",而list2中有三个"COM1"。 - reggaeguitar

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

1
+1,因为使用了“Intersect”。我总是喜欢记住基本的集合操作。 - Ilya Ivanov

5

对于这种类型的需求,您可以使用Except函数。

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

或者你可以这样做,那么下面的代码将创建一个新的列表三,其中包含在列表1和列表2中都不存在的项目。
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 包含 COM4 和 COM3。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接