7 Stimmen

Definieren Sie ein Double-Array ohne feste Größe?

Hallo ich habe ein Problem mit c# Arrays. Ich brauche ein Array, um einige Daten in dort zu speichern... Mein Code ist, dass

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

Aber der Compiler sagt: not defined var Wie kann ich ein Double-Array ohne feste Größe definieren? Herzlichen Dank!

23voto

Blixt Punkte 48333

Arrays haben immer eine feste Größe und müssen auf diese Weise definiert werden:

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

El List<T> Klasse verwendet ein Array im Hintergrund und definiert es neu, wenn der Platz nicht mehr ausreicht:

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

Sie können durch eine List<T> wie bei einem 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]);
}

0voto

Daniel Schneller Punkte 13408

Soweit ich das sehe, haben Sie nicht erklärt, dass die zaehlMittel variabel. Ich vermute, dass der Compiler dies bemängelt.

Abgesehen davon kann man den Wert dieser Variablen natürlich auch programmatisch bestimmen, aber wenn man ein Array erstellen will, muss dessen Größe bekannt sein. Das ist die Art und Weise, wie Arrays funktionieren.

Falls Sie dies nicht ohne weiteres tun können, schlage ich vor, eine dynamische Datenstruktur wie eine Liste oder ein Set zu verwenden. Wenn dann alle Elemente hinzugefügt wurden, können Sie natürlich immer noch ein Array daraus erstellen, da Sie zu diesem Zeitpunkt die Anzahl der Elemente kennen (auch wenn es Komfortmethoden wie toArray() die sich auch darum kümmern).

0voto

Julien Poulin Punkte 12317

Sie müssen das Array instanziieren, bevor Sie es verwenden:

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

0voto

ChrisF Punkte 130622

Die naheliegendste Lösung, die einem in den Sinn kommt, ist die Verwendung einer Liste:

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

Wenn Sie aber nicht von einer Liste in ein Array konvertieren wollen, können Sie das Array später vergrößern:

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
}

Das ist nicht ideal, denn Sie machen einen Großteil der Arbeit, die List hinter den Kulissen arbeitet - wahrscheinlich viel effizienter als Sie.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X