多次元配列 [][] と [,] [重複] 質問する

多次元配列 [][] と [,] [重複] 質問する
double[][] ServicePoint = new double[10][9]; // <-- gives an error (1)
double[,] ServicePoint = new double[10,9]; // <-- ok (2)

それらの違いは何ですか?(1)エラーが発生しますが、その理由は何ですか?

そして

double d = new double[9]
ServicePoint[0] = d;

(2)を使用するとエラーが発生します。なぜでしょうか?

ベストアンサー1

1 つは配列の配列で、もう 1 つは 2 次元配列です。前者はギザギザになる可能性があり、後者は均一です。

つまり、次double[][]のように有効になります。

double[][] x = new double[5][];

x[0] = new double[10];
x[1] = new double[5];
x[2] = new double[3];
x[3] = new double[100];
x[4] = new double[1];

配列内の各エントリは の配列への参照であるためですdouble。不規則配列を使用すると、2 番目の例のように配列への割り当てを行うことができます。

x[0] = new double[13];

2 番目の項目は均一な 2 次元配列であるため、行と列の両方にインデックスを付ける必要があり、1 つの になるため、行または列に 1 次元配列を割り当てることはできませんdouble

double[,] ServicePoint = new double[10,9];

ServicePoint[0]... // <-- meaningless, a 2d array can't use just one index.

アップデート

あなたの質問に基づいて明確にすると、#1 に構文エラーがあった理由は、次のとおりです。

double[][] ServicePoint = new double[10][9];

また、構築時に 2 番目のインデックスを指定することはできません。重要なのは、ServicePoint が 2 次元配列ではなく、1 次元配列 (配列の) であるため、1 次元配列 (配列の) を作成するので、1 つのインデックスのみを指定することです。

double[][] ServicePoint = new double[10][];

次に、配列内の各項目を作成すると、それらもそれぞれ配列になるため、次元を指定できます (次元は異なる場合があるため、ギザギザ配列と呼ばれます)。

ServicePoint[0] = new double[13];
ServicePoint[1] = new double[20];

おすすめ記事