2013-07-24 17 views
5

C#でdouble [] []とdouble [、]を混同します。無効な引数:それがエラーを引き起こすC#:double [] [] double [、]

double[,] data = survey.GetSurveyData(); //Get data 
double[,] inrma = Do_Something(data); 

:私はこの機能を使用したい

public double[][] Do_Something(double[][] A) 
{ 
    ....... 
} 


私のチームメイトが私にこのような機能を与えます。
チームメイトのコードを編集したくありません。
double[][]double [,]に変換する方法はありますか?

ありがとうございます!

+10

'double [] []'はギザギザの配列です。 'double [、]'は多次元配列です。彼らは間違いなく同じタイプではなく、その使用法はかなり異なっています。正しいタスクには正しいタイプを使用します。 –

+0

[なぜ私たちはギザギザアレイと多次元アレイの両方を持っているのですか?](http://stackoverflow.com/questions/4648914/why-we-have-both-jagged-array-and-multidimentional-array)と[What多次元配列と配列の配列の違いはC#?](http://stackoverflow.com/questions/597720/what-is-differences-between-multidimensional-array-and-array-of-arrays-in-c) –

+0

あなたとあなたのチームメイトは、それらの違いは何ですか? –

答えて

8

double[][]およびdouble[,]は、異なる意味を有する。

double[][]はギザギザなので、いくつかの要素は他の要素とは異なる長さにすることができます。

double[,]は「長方形」なので、すべての要素は同じ長さです。

2つの間で「変換」する方法を書くことができますが、違いをどのように修正しますか?私。長い要素から「トリム」したり、短い要素を拡大して長方形にするにはどうしますか?

9

double[][]ダブル[](配列の配列)の配列である しかしdouble[,]が単一の2次元の二重アレイである

例:

double[] Array1 = new double[] {1,2,3}; 
double[] Array2 = new double[] {4,5,6}; 
double[][] ArrayOfArrays = new double[][] {Array1,Array2}; 
double[,] MultidimensionalArray = new double[,] {{1,2}, {3,4}, {5,6}, {7,8}}; 
1
static T[,] Convert<T>(T[][] array) 
{ 
    if (array == null) 
     throw new ArgumentNullException("array"); 
    if (array.Length == 0) 
     return new T[0, 0]; 
    T[,] retval = new T[array.Length, array[0].Length]; 
    for (int i = 0; i < array.Length; i++) 
     for (int j = 0; j < array[i].Length; j++) 
      if (array[i].Length != retval.GetLength(1)) 
       throw new Exception(); 
      else 
       retval[i, j] = array[i][j]; 
    return retval; 
} 
+1

これは非ぎざぎざのギザギザの配列でのみ動作し、すべての入力を処理するには、 'width = array.Max(a => a.Length)'を使用し、空のスロットに 'default(T)'を指定します。チェックインしたい場合は、レベルから移動する必要があります。したがって、すべてのセルではなく、行ごとに1回のみチェックされます。 – RoadieRich

1

彼らは、2つの異なるタイプであります配列の。

double[][]は、配列の配列であるジグザグ配列です。これらのアレイの各々は異なる長さを有することができ、これは問題を引き起こす。

double[,]は単なる多次元配列です。各行は等しい数の列を持ち、各列は等しい数の行を持ちます。

ギザギザの配列は実際には異なる行のディメンションになる可能性があるため、このサイズの違いによって問題が発生します。ギザギザの配列の正確な寸法を知っていれば、2つの間で変換するメソッドを書くこともできますが、その場合は多次元配列を受け入れて返すように元のメソッドを書き直すことをお勧めします(double[,])。

関連する問題