C#动态多维数组

我有一个function……

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

然而’double [,]’不是动态的,我不知道数组的最终大小是多少。 我可以从它创建一个List并将新行添加到列表中,但是我似乎无法将其转换回double [,]。 List.ToArray()想要输出锯齿状数组(double [] [])。 这不行。 我正在与LabVIEW开发的程序接口,LV拒绝接受锯齿状arrays。 LV很满意固定数组([,])。

有帮助吗?

你可以试试这个:

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

它明确地将高阶维度增加1,并validation低阶维度的长度是否等于dataToAdd数组。 我没有能够从dataToAdd到2D数组的更聪明的复制而不是for循环; 不能将Array.Copy应用于不同排序的数组。

您始终可以手动创建二维数组:

 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'具有统一的长度。 否则,你为未使用的元素填充数组是什么?