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.

}

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

有什么帮助吗?

4

2 回答 2

1

你可以试试这个:

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地从二维数组复制;for不能申请Array.Copy不同等级的数组。

于 2012-06-07T15:34:21.793 回答
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”都是统一的长度。否则,你会为未使用的元素填充什么数组?

于 2012-06-07T15:11:53.253 回答