2010-12-02 18 views
7

Tengo una pregunta de novato C#. ¿Qué se considera una buena práctica de los dos a continuación también? ... y es la lista más lenta o más rápida que la matriz?Uso de matrices de listas - Mejores prácticas

 //Method 1 
     int[] i_array = { 2, 0, 110, 53455, 2223 }; 

     if (someBolean) 
     { 
      Array.Resize(ref i_array, i_array.Length + 1); 
      i_array[i_array.Length - 1] = someIntValue; 
     } 

     //Method 2 
     var i_list = new List<int>(); 
     i_list.AddRange(new int[] { 2, 0, 110, 53455, 2223 }); 

     if (someBolean) 
      i_list.Add(someIntValue); 
+1

si cambia constantemente el tamaño de la matriz, también podría usar la lista en el método 2. –

+0

Sé que es difícil de hacer pero que en esta etapa de la curva de aprendizaje, no se preocupe por el rendimiento * hasta que el rendimiento sea un problema *. Vea esta pregunta para http://stackoverflow.com/questions/211414/is-premature-optimization-really-the-root-of-all-evil –

Respuesta

5

Lo posterior se considera la mejor práctica para colecciones de tamaño variable.

Según el tipo de colección que esté utilizando, la clase Framework hará algo internamente similar a lo que está haciendo en su primer ejemplo (excepto que en lugar de cambiar el tamaño por un elemento, aumenta en un tamaño mayor para que tener espacio adicional en el búfer para seguir agregando elementos).

En general, sin embargo, no desea volver a inventar la rueda. El marco proporciona una tonelada de clases de colección que son de tamaño variable. Úselos en lugar de escribir el suyo.

+0

Gracias. Sospeché que aumentaría en un tamaño mayor. Usaré listas. – GuruMeditation

3

Una lista utiliza una matriz internamente, por lo que espero que el rendimiento de estos dos sea el mismo.

Es mucho más difícil cometer errores al programar con listas que con matrices en bruto, así que preferiría las listas la mayor parte del tiempo.

11

Use listas cuando necesite una colección que pueda crecer o reducirse.

Use las matrices si conoce la longitud y no quiere cambiarla.


Puede utilizar collection initializers para inicializar una lista, para que pueda obtener una sintaxis similar a la inicialización de una matriz:

var list = new List<int> { 2, 0, 110, 53455, 2223 }; 

if (someBoolean) 
{ 
    list.Add(someIntValue); 
} 
+0

Gracias. No sabía que podrías inicializarlos así. – GuruMeditation

0

Tanto el viento como IEnumerables, por lo que puede realizar operaciones similares en ambos. El beneficio de la Lista es, como dijo Justin Niessner, colecciones de tamaño variable. Además, cambiar el tamaño de una matriz requeriría que el marco reasigne la memoria, mientras que la Lista se comporta como una lista vinculada, simplemente agregando o eliminando elementos de la colección.