我有一个功能...
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拒绝接受锯齿状阵列。 LV对固定数组([,])很满意。
任何帮助?
答案 0 :(得分: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'具有统一的长度。否则,你为未使用的元素填充数组是什么?
答案 1 :(得分: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;
}
它明确地将高阶维度增加1,并且还验证低阶维度的长度等于dataToAdd
数组。我无法从dataToAdd
复制到2D阵列而不是for
循环。无法对不同排名的数组应用Array.Copy
。