19

我正在尝试检查两者之间的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”,因为其他值是重复的。

如何创建这样的支票?

4

3 回答 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
于 2013-03-25T10:04:15.310 回答
17

您可以使用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();
于 2013-03-25T10:04:30.457 回答
5

对于这个需求之王,你可以利用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");

SecondList 填充了以下值:

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

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

于 2013-03-25T10:04:49.610 回答