2011-06-16 12 views
5

tengo List<sting> con 5 entradas. [0],[1],[2],[3],[4].cómo borrar la lista hasta algún artículo? C#

si uso List.Clear() se eliminan todos los elementos.

necesito quitar hasta el elemento específico, por ejemplo hasta [1]. eso significa que en mi lista solo están 2 items [0] and [1]. ¿Cómo hacer eso con C#?

+0

¿Estás hablando sobre el valor "[1]" o el índice 1? – LukeH

+3

Hombre, ¿por qué se vota esta pregunta? – R0MANARMY

Respuesta

1

Puede utilizar el List.RemoveWhere (predicado) .. Como alternativa, se puede hacer un bucle - bucle hacia atrás, la eliminación de elementos hasta el elemento que está buscando es decir

for(var i = List.Count()-1; i>=0; i--) { 
    var item = List[i]; 
    if (item != "itemThatYourLookingFor") { 
     List.Remove(item); 
     continue; 
    } 
    break; 
} 
4

Puede usar the GetRange method.

Así que ..

myList = myList.GetRange (0,2);

... le daríamos lo que está pidiendo arriba.

+0

pero realmente necesito eliminar todos los elementos que están después de [1] –

+0

@Ragims El código anterior devolverá una lista con solo dos elementos: '[0], [1]'. –

+0

@Ragims La nueva lista solo contiene los 2 elementos [0] y [1], realmente no sé qué es lo que está pidiendo, ya que esto parece abordar el problema en su lugar como se describe en su publicación. – heisenberg

0
List<string> strings = new List<string>{"a", "b", "c", "d", "e"}; 
List<string> firstTwoStrings = strings.Take(2).ToList(); 
// firstTwoStrings contains {"a", "b"} 

El Take(int count) método lo dejará con elementos de conteo.

0

Puede remove a range de una lista, que muestra el índice de inicio y el número de elementos para eliminar.

var items = new List<string> {"0", "1", "2", "3", "4", "5"}; 
var index = items.IndexOf("1") + 1; 

if (index >= 0) 
{ 
    items.RemoveRange(index, items.Count - index); 
} 
+0

Probablemente vale la pena señalar que esto borrará toda la lista si no se encuentra el elemento. El OP no especifica qué comportamiento quieren en esa situación. (Mi respuesta deja intacta la lista si no se encuentra el elemento. Cualquiera de las opciones es igualmente (in) válida a falta de alguna aclaración del OP.) – LukeH

8

Si desea eliminar todos los artículos después de índice 1 (es decir, conservan sólo los dos primeros artículos):

if (yourList.Count > 2) 
    yourList.RemoveRange(2, yourList.Count - 2); 

Si necesita eliminar todos los elementos después del elemento con un valor de "[1]", independientemente de su índice:

int index = yourList.FindIndex(x => x == "[1]"); 
if (index >= 0) 
    yourList.RemoveRange(index + 1, yourList.Count - index - 1); 
+0

¿No quiere decir RemoveRange empezando por 0 y eliminando elementos 'index' ? – R0MANARMY

+0

@ R0MANARMY: La pregunta es ambigua. El OP dice: "Necesito eliminar hasta el elemento específico", pero también dicen "eso significa que en mi lista solo hay 2 elementos [0] y [1]". Podrías tener razón, pero dejaré mi respuesta tal como está por ahora, hasta que el OP aclare sus requisitos. – LukeH

+0

Podría ser solo un sesgo cultural. Estamos acostumbrados a un sistema donde las cosas van de izquierda a derecha. Para nosotros, esas declaraciones son inconsistentes. Pero si lo asumes de derecha a izquierda significa "Quiero comenzar en el lado derecho de la lista y quitar los elementos a la izquierda hasta que llegue al elemento deseado". Entonces las dos declaraciones tienen sentido. – R0MANARMY

Cuestiones relacionadas