2011-11-26 10 views
19

Ho uno List<int> e ho bisogno di contare quanti elementi con (valore < 5) ha - come faccio?Contare gli elementi con int <5 nella lista <T>

+0

Yeesh! Qualcuno ha passato un po 'di tempo a svalutare 4 risposte di seguito. –

+0

@ p.campbell - Sì, chiunque sia stato offeso dall'esterno 'Dove'. – Oded

+4

possibile duplicato di [Ottieni il numero di elementi di un elenco <> utilizzando Linq] (http://stackoverflow.com/questions/3853010/get-item-count-of-a-list-using-linq) –

risposta

55

Count() ha un sovraccarico di accettare Predicate<T>:

int count = list.Count(x => x < 5); 

Vedi MSDN

5
List<int> list = ... 
int count = list.Where(x => x < 5).Count(); 
3

Qualcosa di simile a questo:

var count = myList.Where(x => x < 5).Count(); 
1

Prova questo:

int c = myList.Where(x=>x<5).Count(); 
16

L'opzione più breve:

myList.Count(v => v < 5); 

Questo sarebbe anche fare:

myList.Where(v => v < 5).Count(); 
+0

+1 I in realtà Mi piace molto il metodo successivo in quanto sono prestazioni equivalenti e penso che sia un po 'più chiaro cosa sta succedendo qui. – ForbesLindesay

35

A differenza di altre risposte, questo lo fa in una chiamata di metodo che utilizza questo overload del countextension method:

using System.Linq; 

... 

var count = list.Count(x => x < 5); 

Nota che, poiché i metodi di estensione LINQ sono definiti nella System.Linq spazio dei nomi potrebbe essere necessario aggiungere un'istruzione using e fare riferimento a System.Core se non è già lì (dovrebbe essere).


Vedi anche: Extension methods defined by the Enumerable class.

+1

+1 solo uno senza la clausola estranea dove. –

+2

+1 perché eri un minuto prima della risposta accettata di abatischchev;) – Abel

+0

@Daniel: Solo uno, sì :)) – abatishchev

5

Try -

var test = new List<int>(); 
test.Add(1); 
test.Add(6); 
var result = test.Count(i => i < 5); 
7
int count = list.Count(i => i < 5); 
3
list.Where(x => x < 5).Count() 
2
int c = 0; 
for (i = 0; i > list.Count; i++) 
{ 
    // The "for" is check all elements that in list. 
    if (list[i] < 5) 
    { 
     c = c + 1; // If the element is smaller than 5 
    } 
} 
+0

+1 Per essere l'unica risposta che non usa LINQ. Anche se avrei preferito usare "foreach" invece di "for". Ancora meglio sarebbe un metodo generalizzato che ha un predicato come parametro e può quindi essere invocato usando la notazione lambda. – RenniePet

Problemi correlati