List<List<int>>
の可変数を保持するがあると仮定しますList<int>
。
最初のリストと 2 番目のリストを交差させることができます
var intersection = listOfLists[0].Intersect(listOfLists[1]);
そして、結果を3番目のリストと交差させます
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);
}