簡體   English   中英

C#動態多維數組

[英]C# Dynamic multidimensional array

我有功能...

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 [,]'不是動態的,我不知道數組的最終大小是多少。 我可以從中創建一個列表,然后將新行添加到列表中,但隨后似乎無法將其轉換回double [,]。 List.ToArray()要輸出一個鋸齒狀的數組(double [] [])。 這不會工作。 我正在使用LabVIEW開發的程序進行交互,LV拒絕接受鋸齒狀的數組。 LV對固定數組([,])感到滿意。

有什么幫助嗎?

您總是可以手動創建二維數組:

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”具有統一的長度。 否則,如何為未使用的元素填充數組?

您可以嘗試以下方法:

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應用於不同排名的數組。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM