我假设你有一个List<List<int>>
持有可变数量的List<int>
.
您可以将第一个列表与第二个列表相交
var intersection = listOfLists[0].Intersect(listOfLists[1]);
然后将结果与第三个列表相交
intersection = intersection.Intersect(listOfLists[2]);
依此类推,直到intersection
拥有所有列表的交集。
intersection = intersection.Intersect(listOfLists[listOfLists.Count - 1]);
使用for
循环:
IEnumerable<int> intersection = listOfLists[0];
for (int i = 1; i < listOfLists.Count; i++)
{
intersection = intersection.Intersect(listOfLists[i]);
}
使用foreach
循环(如@lazyberezovsky所示):
IEnumerable<int> intersection = listOfLists.First();
foreach (List<int> list in listOfLists.Skip(1))
{
intersection = intersection.Intersect(list);
}
使用Enumerable.Aggregate:
var intersection = listOfLists.Aggregate(Enumerable.Intersect);
如果顺序不重要,那么您还可以使用HashSet<T>填充第一个列表并与其余列表相交(如@Servy所示)。
var intersection = new HashSet<int>(listOfLists.First());
foreach (List<int> list in listOfLists.Skip(1))
{
intersection.IntersectWith(list);
}