2010-05-19 10 views
8

¿Por qué el código siguiente no borra todos los datos de la lista de matriz?Borrar todos los datos de la lista de matriz

 Console.WriteLine("Before cleaning:" + Convert.ToString(ID.Count)); 
     //ID.Count = 20 
     for (int i = 0; i < ID.Count; i++) 
     { 
      ID.RemoveAt(i); 
     } 
     Console.WriteLine("After cleaning:" + Convert.ToString(ID.Count)); 
     //ID.Count = 10 

¿Por qué se imprime 10 en la pantalla?

¿Tal vez hay otra función especial que elimina todo?

+0

La primera vez que pasa por el ciclo, elimina el elemento en la posición 0.Ahora hay 19 elementos en la lista, el elemento en la posición 1 ahora se mueve a la posición cero, 2 -> 1, 3-> 2 etc. La segunda vez a través del ciclo, se retira el elemento en la posición 1 (este solía ser el elemento 2). Ha salteado el artículo en la posición 0 (que solía ser el elemento 1). De esta forma, eliminará cada segundo elemento de la lista. –

Respuesta

6
`Array.Clear()` 

elimina todos los elementos de la matriz.

`Array.RemoveAt(i)` 

elimina el elemento de índice ith en la matriz.

2

Uso la clara() Método

o

cambio ID.RemoveAt(i);-ID.RemoveAt(0);

Cada vez que un elemento se retira de la colección, su índice también cambia Por lo tanto, cuando diga ID.RemoveAt(0);, el elemento en el índice 1 ahora se moverá al índice 0. Por lo tanto, deberá eliminar el mismo elemento (como la eliminación de secuencias). hasta llegar al último elemento. Sin embargo, si desea eliminar todos los elementos a la vez, puede utilizar mejor el método Clear().

2

Después de eliminar 10 elementos, ID.Count() == 10 y i == 10, el ciclo se detiene.

Utilice ID.Clear() para eliminar todos los elementos en la lista de matriz.

11

Solo llama al RemoveAt 10 veces. Cuando i llegue a 10, ID.Count será 10 también. Usted podría corregir esto haciendo:

int count = ID.Count; 
for (int i = 0; i < originalCount; i++) 
{ 
    ID.RemoveAt(0); 
} 

Esta es una operación (n) O embargo, como la eliminación de una entrada desde el inicio de la lista incluye la copia de todo lo demás.

más eficiente (O (n)):

int count = ID.Count; 
for (int i = 0; i < originalCount; i++) 
{ 
    ID.RemoveAt(ID.Count - 1); 
} 

o equivalente pero más simple:

while (ID.Count > 0) 
{ 
    ID.RemoveAt(ID.Count - 1); 
} 

Pero el uso de ID.Clear() es probablemente más eficaz que todos ellos, a pesar de que también es O (norte).

1

Su código hace:

ID.RemoveAt(0); 
... 
ID.RemoveAt(9); 
ID.RemoveAt(10); \\ at this point you have already removed 10 
       \\ items so there is nothing left on 10- 19, but you are left with 
       \\ the 'first' 10 elements 
... 
ID.RemoveAt(19); 

En términos generales el método elimina cada segundo elemento de la lista ..

Uso ArrayList.Clear en cambio, como otros han mencionado.

Cuestiones relacionadas