我正在尝试将两个集合相交。我在代码片段中列出了下面列出的两个列表。
这是我的输出:
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();
答案 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)
在两个列表中相交返回唯一匹配元素