2012-06-02 19 views
5

Skończyło się na tym, że na mojej liście znajdowało się kilka int (o nazwie "listInts").Jak usunąć wartości ujemne z listy <int>?

To nie powinno nikogo dziwić.

Mój problem polega na tym, że nie chcę żadnych liczb ujemnych, ale istnieje możliwość posiadania trzech, a konkretnie -1, -2 i -3.

mogę niezdarnie je usunąć poprzez:

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

... ale wiem, że to exhudes się stenchier zapachy kodu niż cała passle z tchórze.

Jaki jest lepszy sposób?

Odpowiedz

8

chciałbym używać LINQ:

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

W zależności od tego, jak to ma być używany, można także uniknąć wywołania ToList() a nie ponownie zapisać wartości:

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

to jeszcze pozwoli wyliczasz w razie potrzeby.

Jeśli trzeba zmienić listę w kolejności List<T>.RemoveAll jest rzeczywiście bardziej wydajny sposób:

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

Jednak ja nie preferuje tego jak jest to metoda, która powoduje skutki uboczne, i wydaje się być mylące (stąd utrudnianie konserwacji), jeśli używasz innych metod rozszerzania LINQ.

+1

Choć .RemoveAll będzie lepiej, ponieważ jest realizowany jako metoda listy i wykona operację na samej listy, zamiast tworzyć nowy. – SimpleVar

+0

@YoryeNathan Edytowałem, aby wspomnieć o tym, w tym o tym, dlaczego wolę to od RemoveAll –

+0

To myli te, które nie wiedzą. Spodziewałbym się, że kodery znają kodowanie przed próbą jego utrzymania. Efektywność + Komentowanie = Wygraj. – SimpleVar

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