两个集合的交集

3
我正在尝试对两个集合进行交集操作。在下面的代码段中,我有两个列表。
以下是我的输出:
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个回答

4
正如您在Enumerable.Intersect的说明中所读到的:
两个集合 A 和 B 的交集被定义为包含 A 中所有同时出现在 B 中的元素但没有其他元素的集合。
在一个集合中,您只有不同的对象。 因此,在集合中放置四个 1 与只放置一次相同。 这就是为什么您只会得到一个条目的原因。

2

LINQ 使你的工作更轻松。使用 Contains 方法就像这样:

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

不要忘记先添加LINQ到你的using指令中:

using System.Linq;

这个程序完全按照我的预期工作!是否可能使用DateTime执行相同的操作? - Diego Slinger

2

Intersect返回两个列表中唯一匹配的元素。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接