Domanda

Ciao, ho un problema con le matrici c #. Ho bisogno di un array per archiviare alcuni dati lì dentro ... Il mio codice è quello

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

Ma il compilatore dice: non definito var Come posso definire un doppio array senza una dimensione fissa? Grazie mille!

È stato utile?

Soluzione

Le matrici hanno sempre dimensioni fisse e devono essere definite in questo modo:

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 classe List<T> utilizza un array in background e lo ridefinisce quando si esaurisce lo spazio:

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();

Puoi scorrere tra <=> proprio come faresti con un array:

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]);
}

Altri suggerimenti

Da quello che vedo non hai dichiarato la variabile zaehlMittel. Immagino che questo sia ciò di cui si lamenta il compilatore.

A parte questo, anche se ovviamente puoi determinare il valore di quella variabile a livello di codice, il momento in cui vuoi creare un array delle sue dimensioni deve essere noto. Questo è il modo in cui funzionano gli array.

Nel caso in cui non sia possibile farlo facilmente, suggerisco di utilizzare una sorta di struttura di dati dinamica, come un elenco o un set. Quindi, una volta aggiunti tutti gli elementi, sei ovviamente ancora libero di creare un array da quello, poiché a quel punto conosci il numero di elementi (anche se ci sono metodi di convenienza come toArray() che se ne occuperanno anche ).

Devi istanziare l'array prima di usarlo:

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

L'ovvia soluzione che mi viene in mente è usare un Elenco:

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

Ma se non si desidera convertire da un elenco a un array, è possibile espandere l'array in un secondo momento:

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
}

Non è l'ideale perché stai facendo molto del lavoro che List sta facendo dietro le quinte - probabilmente molto più efficacemente di quanto tu possa fare.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top