Определить двойной массив без фиксированного размера? - PullRequest
7 голосов
/ 22 июня 2009

Здравствуйте, у меня проблема с массивами c #. Мне нужен массив для хранения там некоторых данных ... Мой код таков:

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

Но компилятор говорит: не определено var Как я могу определить двойной массив без фиксированного размера? Большое спасибо!

Ответы [ 4 ]

20 голосов
/ 22 июня 2009

Массивы всегда имеют фиксированный размер и должны быть определены следующим образом:

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

Класс List<T> использует массив в фоновом режиме и переопределяет его, когда ему не хватает места:

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

Вы можете перебирать List<T> так же, как и массив:

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 голосов
/ 22 июня 2009

Очевидное решение, которое приходит на ум - использовать List:

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

Но если вы не хотите преобразовывать список в массив, вы можете увеличить его позже:

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
}

Это не идеально, так как вы выполняете большую часть работы, которую List выполняет за кулисами - возможно, намного эффективнее, чем вы можете.

0 голосов
/ 22 июня 2009

Вы должны создать экземпляр массива перед его использованием:

double[] ATmittelMin = new double[10];
ATmittelMin[zaehlMittel] = Gradient(x, xATmax, y, yATmax);
0 голосов
/ 22 июня 2009

Из того, что я вижу, вы не объявили переменную zaehlMittel. Я думаю, это то, на что жалуется компилятор.

Кроме того, хотя вы, конечно, можете определить значение этой переменной программно, момент, когда вы хотите создать массив, должен быть известен. Так работают массивы.

Если вы не можете сделать это легко, я предлагаю использовать некоторую динамическую структуру данных, например, список или набор. Затем, когда все элементы добавлены, вы, конечно, все еще можете свободно создавать массив из этого, поскольку к тому времени вы уже знаете количество элементов (хотя существуют удобные методы, такие как toArray(), которые даже позаботятся об этом. ).

...