2012-06-02 11 views
5

Mi sto ritrovando con un sacco di ints nella mia lista (chiamata "listInts").Come rimuovere i valori negativi da un elenco <int>?

Questo non dovrebbe sorprendere nessuno.

Il mio problema è che non voglio nessun numero negativo, ma c'è la possibilità di avere tre, in particolare -1, -2 e -3.

posso maldestramente rimuoverli via:

if (listInts.Contains(-1) { 
    int i = listInts.IndexOf(-1); 
    listInts.Remove(i); 
    // etc. 
} 

... ma so che questo exhudes uno stenchier codice di odore di un intero passle di puzzole.

Che cos'è un modo migliore?

risposta

8

Vorrei usare LINQ:

listInts = listInts.Where(i => i >= 0).ToList(); 

A seconda di come questo sta per essere utilizzato, si potrebbe anche evitare la chiamata ToList() e non salvare nuovamente i valori:

var positiveInts = listInts.Where(i => i >= 0); 

Questo sarà ancora lasciare Enumerare secondo necessità.

Se è necessario modificare l'elenco sul posto, List<T>.RemoveAll è in realtà un metodo più efficiente:

listInts.RemoveAll(i => i < 0); 

Tuttavia, io non preferisco questo come si tratta di un metodo che provoca effetti collaterali, e tende ad essere fonte di confusione (quindi ostacolare la manutenzione) se stai usando altri metodi di estensione LINQ.

+1

Sebbene .RemoveAll sarà meglio dato che è implementato come un metodo di lista, ed esegue l'operazione nella lista stessa, invece di creare uno nuovo. – SimpleVar

+0

@YoryeNathan Ho modificato per dirlo, compreso perché preferisco questo su RemoveAll –

+0

confonde quelli che non lo so. Mi aspetto che i programmatori conoscano la codifica prima di provare a mantenerne uno. Efficienza + Commenti = Win. – SimpleVar

9
listInts.RemoveAll(t => t < 0) 
Problemi correlati