1. ホーム
  2. c#

[解決済み] 多次元配列 [][] vs [,] [重複]の比較

2022-03-20 15:28:30

質問

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つは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はというと ではない したがって、1次元の配列(の配列)を作成するのですから、インデックスは1つだけ指定することになります。

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

そして、配列の各項目を作成すると、それらもそれぞれ配列になるので では を指定すると、その次元(異なる場合もある。 ギザギザ の配列)。

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

お役に立てれば幸いです。