两个集合交集

时间:2017-11-11 07:41:57

标签: c# collections intersection

我正在尝试将两个集合相交。我在代码片段中列出了下面列出的两个列表。

这是我的输出:

Intersection
1

为什么只找到一个值?这是预期的行为还是我做错了什么?

我希望我的输出看起来像这样:

Intersection
1
1
1
1

我的代码:

// Collection initialization
List<int> list1 = new List<int> { 1,1,1,1 }; 
List<int> list2 = new List<int> { 1,1,1,1,1,1,1,1,1,1,1 };

foreach (int q in list1)
    Console.WriteLine("list1: " + q);

Console.WriteLine("------------------");

foreach (int q in list2)
    Console.WriteLine("list2: " + q);

Console.WriteLine("------------------");
Console.WriteLine("Intersection");

IEnumerable<int> both = list1.Intersect(list2);

foreach (int a in both)
    Console.WriteLine(a);

Console.ReadLine();
Console.Clear();

3 个答案:

答案 0 :(得分:4)

正如您在Enumerable.Intersect

的说明中所述
  

将两组A和B的交集定义为该组的集合   包含A中也出现在B中的所有元素,但没有其他元素   元件。

set中,您只有不同的对象。所以在一组中放四个1只就像把它放在一次一样。 这就是为什么你只有一个条目。

答案 1 :(得分:2)

LINQ让您的工作更轻松。使用Contains这样的方法:

List<int> resultList = list1.Where(c => list2.Contains(c)).ToList();

不要忘记首先将LINQ添加到您的using指令中:

using System.Linq;

答案 2 :(得分:2)

在两个列表中相交返回唯一匹配元素