c#使用Linq比较List <t>(s)

时间:2016-02-10 19:21:23

标签: c# collections

我想比较两个系列。我相信我做的很长(代码)。我想找到与另一个集合相比可能在集合中丢失的数字。订单并不重要。

  class Program
{
    static void Main(string[] args)
    {
       List< int> x = new List<int>() { 1 };
       List< int> y = new List<int>() { 1, 2, 3 };

        //find what numbers (if any) that x needs to  have in order to have  an identical list as y (order not important)

        List<int> missingNumbers = new List<int>();
        foreach (var number in y)
        {
            if (!x.Contains(number))
            {
                missingNumbers.Add(number);
            }
        }
        foreach (var missingNumber in missingNumbers)
        {
            x.Add(missingNumber);
        }
    }
}

3 个答案:

答案 0 :(得分:4)

只需使用Union扩展方法,如下所示:

// x will contain 1, 2, 3. 
// No ducplicate will be added 
// and the missing numbers 2 and 3 are added.
x = x.Union(y).ToList(); 

答案 1 :(得分:2)

如果您想直接组合列表,.Union()肯定会有用。如果您只想查找一个列表中缺少的值,请执行.Except(),例如

List<int> x = new List<int>() { 1 };
List<int> y = new List<int>() { 1, 2, 3 };
var result = y.Except(x).ToList();

结果将返回{ 2, 3 }。如果您想将result添加到x,只需执行x.AddRange(result)

答案 2 :(得分:1)

这就是诀窍:

x.AddRange(y.Where(num => !x.Contains(num)));