Определить двойной массив без фиксированного размера?

StackOverflow https://stackoverflow.com/questions/1026134

  •  06-07-2019
  •  | 
  •  

Вопрос

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

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

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

Это было полезно?

Решение

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

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

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

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

Другие советы

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

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

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

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

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

Очевидное решение, которое приходит на ум, - это использовать 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 выполняет за кулисами, - возможно, намного эффективнее, чем вы можете.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top