我想計算匹配某個條件的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++;
最後一種方法也可以exandend算幾個條件沒有遍歷循環不止一次做到這一點。 (我已經發現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)
我的問題(S):
有沒有這樣的事情,只是我還沒有找到它?
如果不是:實現此功能的方式是什麼?
編輯:
添加LINQ看起來像它修復它。
哪個版本的c#?有[Enumerable.Count方法(IEnumerable ,Func )](http://msdn.microsoft.com/fr-fr/library/bb535181(v = vs.110).aspx) –
NicoD
有看一下LINQ方法Count:http://msdn.microsoft.com/en-us/library/vstudio/system.linq.enumerable.count(v=vs.100).aspx –
可能重複的http:// stackoverflow.com/questions/3853010/get-item-count-of-a-list-using-linq –