Pregunta

Hola, tengo un problema con las matrices de c #. Necesito una matriz para almacenar algunos datos allí ... Mi código es eso

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

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

¿Fue útil?

Solución

Las matrices siempre tienen un tamaño fijo y deben definirse 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> usa una matriz en segundo plano 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();

Puede iterar a través de un <=> tal como lo haría con 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]);
}

Otros consejos

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

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

En caso de que no pueda hacerlo 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, aún puede crear una matriz a partir de eso, ya que para ese momento conoce la cantidad de elementos (aunque existen métodos convenientes como toArray() que incluso se encargarán de eso ).

Debe crear una instancia de la matriz antes de usarla:

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

La solución obvia que viene a la mente es usar una Lista:

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

Pero si no desea convertir de una lista a una matriz, puede hacer crecer la matriz más tarde:

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 lo ideal, ya que está haciendo una gran parte del trabajo que List está haciendo detrás de escena, probablemente de manera mucho más eficiente que usted.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top