2009-09-24 13 views
10

Powiedzmy, mam tablicę list i chcę uzyskać liczbę wszystkich elementów na wszystkich listach. Jak obliczyć liczbę z LINQ? (Tylko ogólnie ciekawość tutaj)Jaki jest sposób LINQ'ish to zrobić

Oto stary sposób to zrobić:

 

List<item>[] Lists = // (init the array of lists) 
int count = 0; 
foreach(List<item> list in Lists) 
    count+= list.Count; 
return count; 
 

Jak byś LINQify że? (C# składni, proszę)

Odpowiedz

27

Zastosowanie metody Sum():

int summedCount = Lists.Sum(l => l.Count); 
+2

true LINQ użyje: var summedCount = ... –

+7

@Travis: w ogóle. Var nie jest wymogiem w żadnej sytuacji z wyjątkiem użycia anonimowych typów. We wszystkich innych przypadkach jest to "prawdą" linq do używania var lub typu silnego, jak prosi deweloper, nie ma praktycznej różnicy dla wszystkich zamiarów i celów. – jrista

12

Lubię @ jrista na odpowiedzieć lepiej niż to, ale można zrobić

int summedCount = Lists.SelectMany(x => x).Count(); 

Chciałem tylko pokazać wykorzystanie SelectMany w przypadku chcesz robić inne rzeczy z kolekcją kolekcji.

+2

Dobry sposób na opisanie SelectMany. +1 – jrista

4

A jeśli chcesz być wyobraźnia

int summedCount = Lists.Aggregate(0, (acc,list) => acc + list.Count); 

Ale pierwsza odpowiedź jest zdecydowanie najlepszy.

Powiązane problemy