Matriz dinámica en C #


112

¿Existe algún método para crear una matriz dinámica en C #?


1
Si todavía está atascado en el barro viejo, usando [] en su lugar si List <>, puede usar Array.Resize (). He aquí un buen ejemplo. dotnetperls.com/array-resize
Gian

El enlace dotnetperls.com/array-resize no funciona. (FYI)
Su Llewellyn

Respuestas:


150

Eche un vistazo a las listas genéricas .


13
La pregunta (aunque breve y no descriptiva) no se refiere a una lista genérica; la pregunta podría ser sobre dynamic[] msdn.microsoft.com/en-GB/library/dd264736.aspx (matriz de tipos dinámicos) o ExpandoObject msdn.microsoft.com/ en-us / library /… Podría -1 la respuesta para no mencionarlos
Luke T O'Brien

6
@ LukeTO'Brien, la dinámica se introdujo en C # 4.0, que se lanzó un año completo después de que se formulara originalmente esta pregunta. OP probablemente estaba preguntando acerca de una estructura de datos redimensionable como en.wikipedia.org/wiki/Dynamic_array
Brian Merrell

6
Las respuestas que solo contengan enlaces a artículos no son útiles. No hay garantía de que el enlace permanezca activo.
JamEngulfer

@JamEngulfer Eso es falso. Si el texto de su vínculo fuera "Mira esto" con "esto" vinculado, estaría de acuerdo contigo. Si elimina el enlace y mira lo que queda, la respuesta del OP a "echar un vistazo a las listas genéricas" es mucha información para que cualquier futuro lector busque en Google ...
Lynn Crumbling

88

Ampliando la respuesta de Chris y Migol con una muestra de código.

Usando una matriz

Student[] array = new Student[2];
array[0] = new Student("bob");
array[1] = new Student("joe");

Usando una lista genérica. Bajo el capó, la clase List <T> usa una matriz para el almacenamiento, pero lo hace de una manera que le permite crecer de manera eficiente.

List<Student> list = new List<Student>();
list.Add(new Student("bob"));
list.Add(new Student("joe"));
Student joe = list[1];

2
este ejemplo es medio malo, porque ambos hablamos sobre ArrayList
Migol

21
Esta respuesta es mejor que la tuya @Migol, porque muestra cómo usar realmente la Lista <> en lugar de solo mencionarla como una palabra clave. "medio malo" -> "medio bueno" -> bueno
fhugas

56

A veces, se prefieren las matrices simples a las listas genéricas, ya que son más convenientes (mejor rendimiento para cálculos costosos, aplicaciones de álgebra numérica, por ejemplo, o para intercambiar datos con software de estadísticas como R o Matlab)

En este caso, puede usar el método ToArray () después de iniciar su Lista dinámicamente

List<string> list = new List<string>();
list.Add("one");
list.Add("two");
list.Add("three");

string[] array = list.ToArray();

Por supuesto, esto tiene sentido solo si el tamaño de la matriz nunca se conoce ni se fija ex ante . si ya conoce el tamaño de su matriz en algún punto del programa , es mejor iniciarlo como una matriz de longitud fija. (Si recupera datos de un ResultSet, por ejemplo, puede contar su tamaño e iniciar una matriz de ese tamaño, de forma dinámica)


1
No vale la pena, siempre y cuando utilice el indexador.
aaimnr

2
Los Ararys no son más convenientes (ofrecen un subconjunto de la interfaz List <T>) y ofrecen casi el mismo rendimiento, ya que List <T> usa una matriz regular debajo. Iteración para 6000000 elementos: List / for: 1971ms Array / for: 1864ms (Benchmark from stackoverflow.com/questions/454916/… )
aaimnr

9
Si tiene que pasar una matriz a una interfaz, debe ser una matriz. Es mucho más fácil crear una lista y luego convertirla en una matriz justo antes de pasarla. ¡Me gusta esta respuesta más que las otras porque aborda la pregunta!
Michael Stimson

36

List<T>para uno fuertemente tipado, o ArrayListsi tiene .NET 1.1 o le encanta convertir variables.


2

Ejemplo de matriz dinámica:

Console.WriteLine("Define Array Size? ");
int number = Convert.ToInt32(Console.ReadLine());

Console.WriteLine("Enter numbers:\n");
int[] arr = new int[number];

for (int i = 0; i < number; i++)
{
    arr[i] = Convert.ToInt32(Console.ReadLine());
}
for (int i = 0; i < arr.Length; i++ )
{
    Console.WriteLine("Array Index: "+i + " AND Array Item: " + arr[i].ToString());
}
Console.ReadKey();

2

Puede hacer esto con objetos dinámicos:

var dynamicKeyValueArray = new[] { new {Key = "K1", Value = 10}, new {Key = "K2", Value = 5} };

foreach(var keyvalue in dynamicKeyValueArray)
{
    Console.Log(keyvalue.Key);
    Console.Log(keyvalue.Value);
}

1

Utilice la lista de matrices que en realidad es una matriz de implementación. Inicialmente toma una matriz de tamaño 4 y cuando se llena, se crea una nueva matriz con su tamaño doble y los datos de la primera matriz se copian en la segunda matriz, ahora el nuevo elemento se inserta en una nueva matriz. Además, el nombre de la segunda matriz crea un alias de la primera para que se pueda acceder a ella con el mismo nombre que la anterior y la primera matriz se elimine.


1

puede usar el objeto lista de matrices de la clase de colecciones

using system.collections;
   static void main()
        {
        Arrylist arr=new Arrylist();
         }

cuando desee agregar un elemento, puede usar

arr.add();

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.