一尘不染

多维数组[] []与[,] [重复]

c#

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) 将提示错误。为什么?


阅读 260

收藏
2020-05-19

共1个答案

一尘不染

一个是数组数组,一个是2d数组。前者可以锯齿状,后者是统一的。

也就是说,a 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。对于锯齿状数组,可以在第二个示例中对数组进行分配:

x[0] = new double[13];

在第二项上,因为它是统一的2d数组,所以不能将1d数组分配给行或列,因为必须同时对行和列进行索引,这会使您陷入单一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];

并且您不能在构造时指定第二个索引。关键在于ServicePoint 不是
2d数组,而是1d数组(数组),因此,由于要创建1d数组(数组),因此只能指定一个索引:

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

然后,当在阵列中创建的每个项目,每个这些也都是阵列,所以 然后 可以指定它们的尺寸(其可以是不同的,因此术语 锯齿状 排列):

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

希望有帮助!

2020-05-19