我有一个List<List<T>>.如何List<T>以最快的方式计算其中的所有元素?
到目前为止我已经习惯了
List<int> result = listOfLists
.SelectMany(list => list)
.Distinct()
.ToList().Count;
Run Code Online (Sandbox Code Playgroud)
但这实际上会创建一个列表,然后计算一个不是一个好主意的元素.
Hom*_*mam 16
通过使用LINQ,我认为您的代码很好,有一些不需要的更改.ToList(),只需调用Count()扩展如下:
int result = listOfLists.SelectMany(list => list).Distinct().Count();
Run Code Online (Sandbox Code Playgroud)
tva*_*son 14
如果你需要消除列表之间的重复,我会推荐一个带有HashSet的简单嵌套循环.它将SelectMany和Distinct操作组合到集合插入逻辑中,并且应该更快,因为HashSet具有O(1)查找时间.内部Distinct()实际上可能使用类似的东西,但这完全省略了单个列表的构造.
var set = new HashSet<T>();
foreach (var list in listOfLists)
{
foreach (var item in list)
{
set.Add(item);
}
}
var result = set.Count;
Run Code Online (Sandbox Code Playgroud)
小智 9
要计算列表中所有列表中的所有元素,可以使用聚合运算符:
int count = listOfLists.Sum(l => l.Distinct().Count());
Run Code Online (Sandbox Code Playgroud)