我有一台List<List<T>>
。我如何才能以最快的方式计算出其中的所有元素,就好像它是一个List<T>
一样?
到目前为止,我已经使用了
List<int> result = listOfLists
.SelectMany(list => list)
.Distinct()
.ToList().Count;
但这实际上创建了一个列表,然后计算元素,这不是一个很好的想法。
发布于 2011-06-01 20:24:17
如果您需要消除列表之间的重复项,我建议您使用带有HashSet的简单嵌套循环。它将SelectMany和Distinct操作组合到集合插入逻辑中,并且应该更快,因为HashSet的查找时间为O(1)。Internally ()实际上可能使用类似的东西,但这完全省略了单个列表的构造。
var set = new HashSet<T>();
foreach (var list in listOfLists)
{
foreach (var item in list)
{
set.Add(item);
}
}
var result = set.Count;
发布于 2011-06-01 20:31:28
通过使用LINQ,我认为你的代码很好,只需要做一点改动,不需要.ToList()
,只需像下面这样调用Count()
扩展即可。
int result = listOfLists.SelectMany(list => list).Distinct().Count();
发布于 2011-06-01 20:21:27
要对列表中所有列表中的所有元素进行计数,可以使用聚合运算符:
int count = listOfLists.Sum(l => l.Distinct().Count());
https://stackoverflow.com/questions/6200967
复制相似问题