2009-06-22 18 views
5

Hola tengo un problema con las matrices de C#. Necesito una matriz para almacenar algunos datos en allí ... Mi código es que¿Define una matriz doble sin un tamaño fijo?

double[] ATmittelMin; 
ATmittelMin[zaehlMittel] = Gradient(x, xATmax, y, yATmax); 

Pero el compilador dice: No definido var ¿Cómo puedo definir una doble matriz sin un tamaño fijo? ¡Muchas gracias!

Respuesta

15

matrices son siempre fijos en tamaño, y tienen que ser definidas así:

double[] items1 = new double[10]; 

// This means array is double[3] and cannot be changed without redefining it. 
double[] items2 = {1.23, 4.56, 7.89}; 

La clase List<T> utiliza una matriz en el fondo y la redefine cuando se queda sin espacio:

List<double> items = new List<double>(); 
items.Add(1.23); 
items.Add(4.56); 
items.Add(7.89); 

// This will give you a double[3] array with the items of the list. 
double[] itemsArray = items.ToArray(); 

se puede recorrer un List<T> tal como lo haría una matriz:

foreach (double item in items) 
{ 
    Console.WriteLine(item); 
} 

// Note that the property is 'Count' rather than 'Length' 
for (int i = 0; i < items.Count; i++) 
{ 
    Console.WriteLine(items[i]); 
} 
+0

cómo puedo iterar a través de la lista – subprime

+0

@subprime: foreach (elemento doble en los elementos) {...}, o a través de los elementos [n] indexer –

+0

gracias! esta es la respuesta :) – subprime

0

Por lo que veo, no declaró la variable zaehlMittel. Supongo que esto es de lo que se queja el compilador.

Aparte de eso, aunque por supuesto puede determinar el valor de esa variable mediante programación, debe conocerse el momento en que desea crear una matriz de su tamaño. Esta es la forma en que las matrices funcionan.

En caso de que no pueda hacer eso fácilmente, sugiero usar algún tipo de estructura de datos dinámica, como una lista o un conjunto. Luego, una vez que se hayan agregado todos los elementos, por supuesto puede crear una matriz a partir de eso, ya que para ese momento conoce la cantidad de elementos (aunque existen métodos de conveniencia como toArray() que incluso se encargarán de eso).

0

Tienes que instanciate la matriz antes de usarlo:

double[] ATmittelMin = new double[10]; 
ATmittelMin[zaehlMittel] = Gradient(x, xATmax, y, yATmax); 
+0

Solo funciona si zaehlMittel <10 – ChrisF

0

La solución obvia que viene a la mente es el uso de una lista:

List<double> ATmittelMin = new List<double>(); 
ATmittelMin.Add(Gradient(x, xATMax, y, yATMax); 

Pero si no desea convertir de una lista en una matriz puede hacer crecer la matriz después:

double[] ATmittelMin = new double[10]; 
// Some code 
int index = some_value; 
if (index >= TmittelMin.Length) 
{ 
    Array.Resize(ATmittelMin, index+5); // So we're not constantly resizing the array 
} 

no es ideal, ya que está haciendo una gran cantidad de el trabajo que List está haciendo entre bastidores, probablemente de manera mucho más eficiente que usted.

Cuestiones relacionadas