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[,]」は動的ではなく、配列の最終的なサイズがわかりません。そこからリストを作成し、新しい行をリストに追加できますが、それを 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;
}

高次の次元を明示的に1つインクリメントし、低次の次元の長さがdataToAdd配列と等しいことも確認します。ループdataToAddよりも2D配列への賢いコピーはできませんでした。ランクの異なるアレイforに適用することはできません。Array.Copy

于 2012-06-07T15:34:21.793 に答える
0

2次元配列はいつでも手動で作成できます。

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 に答える