首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >计算List<List<T>>中的元素个数

计算List<List<T>>中的元素个数
EN

Stack Overflow用户
提问于 2011-06-01 20:16:31
回答 4查看 48K关注 0票数 24

我有一台List<List<T>>。我如何才能以最快的方式计算出其中的所有元素,就好像它是一个List<T>一样?

到目前为止,我已经使用了

代码语言:javascript
复制
List<int> result = listOfLists
  .SelectMany(list => list)
  .Distinct()
  .ToList().Count;

但这实际上创建了一个列表,然后计算元素,这不是一个很好的想法。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-06-01 20:24:17

如果您需要消除列表之间的重复项,我建议您使用带有HashSet的简单嵌套循环。它将SelectMany和Distinct操作组合到集合插入逻辑中,并且应该更快,因为HashSet的查找时间为O(1)。Internally ()实际上可能使用类似的东西,但这完全省略了单个列表的构造。

代码语言:javascript
复制
var set = new HashSet<T>();
foreach (var list in listOfLists)
{
    foreach (var item in list)
    {
        set.Add(item);
    }
}
var result = set.Count;
票数 15
EN

Stack Overflow用户

发布于 2011-06-01 20:31:28

通过使用LINQ,我认为你的代码很好,只需要做一点改动,不需要.ToList(),只需像下面这样调用Count()扩展即可。

代码语言:javascript
复制
int result = listOfLists.SelectMany(list => list).Distinct().Count();
票数 23
EN

Stack Overflow用户

发布于 2011-06-01 20:21:27

要对列表中所有列表中的所有元素进行计数,可以使用聚合运算符:

代码语言:javascript
复制
int count = listOfLists.Sum(l => l.Distinct().Count());
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6200967

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档