Вопрос по c#, labview, multidimensional-array – C # Динамический многомерный массив

1

У меня есть функция ...

private double[,] AddToArray(double[,] array, double[] dataToAdd)
{
    // Make a new row at the end of 'array' and copy values 
    // from 'dataToAdd' into the new row.
    //
    // Return the new, modified array.

}

Однако «двойной [,]» не является динамическим, и я не знаю, какой будет окончательный размер массива. Я могу создать из него список и добавить новую строку в список, но тогда я не могу преобразовать его обратно в двойной [,]. List.ToArray () хочет вывести зубчатый массив (double [] []). Это не сработает. Я взаимодействую с программой, разработанной в LabVIEW, и LV отказывается принимать зубчатый массив. LV доволен фиксированным массивом ([,]).

Любая помощь?

Ваш Ответ

2   ответа
0

private double[,] AddToArray(double[,] array, double[] dataToAdd)
{
  var dim0 = array.GetLength(0);
  var dim1 = array.GetLength(1);
  if (dim1 != dataToAdd.Length) throw new ArgumentException();

  var na = new double[dim0 + 1, dim1];
  Array.Copy(array, na, array.Length);
  for (var i = 0; i < dim1; ++i) na[dim0, i] = dataToAdd[i];

  return na;
}

Он явно увеличивает размер старшего разряда на единицу, а также проверяет, что длина измерения младшего разряда равнаdataToAdd массив. Я не смог более умного копирования сdataToAdd в 2D массив, чемfor петля; невозможно применитьArray.Copy для разных ранжированных массивов.

0

double[,] array = new double[list.Count, data.Length];
for(int i = 0;i < list.Count;++i)
    for(int j = 0;j < data.Length;++j)
        array[i, j] = list[i][j];

Это, конечно, при условии, что все «dataToAdd»; имеет одинаковую длину. В противном случае, что вы заполняете массив для неиспользуемых элементов?

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