我有一种情况,我已经生成了许多包含整数值的列表.但是,这些列表的数量仅在运行时已知,并且结果列表中存在的整数必须存在于所有列表中.有没有一种方法可以将所有这些列表合并到一个列表中?
即
List<int> l1 = {1, 2, 3, 4};
List<int> l2 = {2, 3, 5, 7, 9};
List<int> l3 = {3, 9, 10};
List<int> ln = {....};
Run Code Online (Sandbox Code Playgroud)
结果列表应如下所示
List<int> r = {3};
Run Code Online (Sandbox Code Playgroud)
这可能与linq或任何其他方法?
我假设你有List<List<int>>一个可变数量的List<int>.
您可以将第一个列表与第二个列表相交
var intersection = listOfLists[0].Intersect(listOfLists[1]);
Run Code Online (Sandbox Code Playgroud)
然后将结果与第三个列表相交
intersection = intersection.Intersect(listOfLists[2]);
Run Code Online (Sandbox Code Playgroud)
等等直到intersection持有所有列表.
intersection = intersection.Intersect(listOfLists[listOfLists.Count - 1]);
Run Code Online (Sandbox Code Playgroud)
使用for循环:
IEnumerable<int> intersection = listOfLists[0];
for (int i = 1; i < listOfLists.Count; i++)
{
intersection = intersection.Intersect(listOfLists[i]);
}
Run Code Online (Sandbox Code Playgroud)
使用foreach循环(如@lazyberezovsky所示):
IEnumerable<int> intersection = listOfLists.First();
foreach (List<int> list in listOfLists.Skip(1))
{
intersection = intersection.Intersect(list);
}
Run Code Online (Sandbox Code Playgroud)
var intersection = listOfLists.Aggregate(Enumerable.Intersect);
Run Code Online (Sandbox Code Playgroud)
如果顺序不重要,那么您还可以使用填充第一个列表并与剩余列表相交的HashSet <T>(如@Servy所示).
var intersection = new HashSet<int>(listOfLists.First());
foreach (List<int> list in listOfLists.Skip(1))
{
intersection.IntersectWith(list);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
869 次 |
| 最近记录: |