【发布时间】:2014-08-29 05:16:48
【问题描述】:
我想计算 List<T> 中符合特定条件的对象的出现次数。
比如像这样int List<T>.Count(Predicate<T> match)
例如,如果有一个chores 的列表,我可以看到有多少过期了。
int overdue = listOfChores.Count((element) => { return element.DueDate <= DateTime.Today; });
我知道不存在,到目前为止我通过以下方式解决了类似的问题:
int overdue = listOfChores.FindAll([...]).Count;
然而,分配和初始化一个新的列表等只是为了获得计数。
一种减少分配开销等的方法:
int good = 0;
foreach(chore element in listOfChores)
if(element.DueDate <= DateTime.Today)
good++;
最后一种方法也可以扩展为计算多个条件,而无需多次迭代循环。 (我已经找到了getting the count property only takes O(1),但是从列表开始计数仍然需要很多时间)
int a = 0;
int b = 0;
foreach(chore element in listOfChores)
if(element.CondA)
a++;
if(element.CondB)
b++;
鉴于此,我什至可以想象类似int[] List<T>.Count(Predicate<T>[] matches)
我的问题:
有没有这种东西,只是我还没找到?
如果没有:实现此类功能的方法是什么?
编辑:
添加 LINQ 似乎可以解决问题。
【问题讨论】:
-
看看LINQ方法Count:msdn.microsoft.com/en-us/library/vstudio/…
-
@NicoD 我在 .Net 4.0 上。我现在就试一下那个链接。
-
没有 System.Linq 你不能使用像 Enumerable.Count
这样的扩展方法,所以你还没有找到它