2012-06-02 8 views
5

Estoy terminando con un montón de entradas en mi lista (llamadas "listInts").Cómo eliminar valores negativos de una lista <int>?

Eso no debería sorprender a nadie.

Mi problema es que no quiero ningún número negativo, pero existe la posibilidad de tener tres, específicamente -1, -2 y -3.

puedo quitar torpemente ellos a través de:

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

... pero sé que este exhudes un código stenchier olor que todo un passle de los hurones.

¿Cuál es la mejor manera?

Respuesta

8

me gustaría utilizar LINQ:

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

Dependiendo de cómo se va a utilizar, usted podría también evitar la llamada ToList() y no volver a guardar los valores:

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

Esto todavía le permitirá enumeras según sea necesario.

Si necesita cambiar la lista en su lugar, List<T>.RemoveAll es en realidad un método más eficiente:

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

Sin embargo, no prefiero esto ya que es un método que causa efectos secundarios, y tiende a ser confuso (por lo tanto, dificulta el mantenimiento) si está utilizando otros métodos de extensión LINQ.

+1

Aunque .RemoveAll será mejor ya que se implementa como un método de lista, y realizará la operación en la lista, en lugar de crear una nueva. – SimpleVar

+0

@YoryeNathan Lo edité para mencionar eso, incluyendo por qué prefiero esto a RemoveAll –

+0

Confunde a los que no saben. Esperaría que los codificadores conocieran la codificación antes de intentar mantenerla. Eficiencia + comentarios = Ganar. – SimpleVar

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