我正试图检查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”填充,因为其他值是重复的。
我该如何制作这样的支票?
答案 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.