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

Конечно, это возможно. ListView.delegate является своего рода указателем на Component, который будет рисовать элементы, чтобы вы могли их изменить.

Например:

Employee { id: delegateEmployee }
Manager { id: delegateManager}
...
ListView {  
    property string position   
    delegate: position == "Engineer" ? delegateEmployee : delegateManager
}
7
задан subprime 22 June 2009 в 08:51
поделиться

4 ответа

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

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 использует массив в фон и переопределяет его, когда на нем заканчивается место:

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 так же, как и массив:

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]);
}
21
ответ дан 6 December 2019 в 08:45
поделиться

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

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

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

0
ответ дан 6 December 2019 в 08:45
поделиться

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

double[] ATmittelMin = new double[10];
ATmittelMin[zaehlMittel] = Gradient(x, xATmax, y, yATmax);
0
ответ дан 6 December 2019 в 08:45
поделиться

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

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
ответ дан 6 December 2019 в 08:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: