【问题标题】:Compare the difference between two list<string>比较两个 list<string> 的区别
【发布时间】:2013-03-25 10:02:58
【问题描述】:

我正在尝试检查c# 中两个List&lt;string&gt; 之间的区别。

例子:

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”,因为其他值是重复的。

如何创建这样的支票?

【问题讨论】:

    标签: c# visual-studio list compare


    【解决方案1】:

    尝试使用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允许我这样做时,我会接受这个作为我的答案:)
    • 请注意,这是列表之间的 Set 差异。这不会告诉您 list1 是否有两个“COM1”副本,而 list2 是否有三个“COM1”副本
    【解决方案2】:

    你可以使用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 带来Intersect。我总是喜欢记住基本的集合操作。
    【解决方案3】:

    对于这个需求之王,您可以使用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.

    【讨论】:

      猜你喜欢
      • 2014-12-03
      • 1970-01-01
      • 2013-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-05
      • 1970-01-01
      • 2011-12-11
      相关资源
      最近更新 更多