c# - 多维数组 [][] 与 [,]

标签 c# arrays multidimensional-array

<分区>

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

最佳答案

一个是数组的数组,一个是二维数组。前者可以是锯齿状的,后者是均匀的。

也就是说,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];

在第二项上,因为它是一个统一的二维数组,你不能将一个一维数组分配给行或列,因为你必须同时索引行和列,这让你只能使用一个 :

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 不是二维数组,而是一维数组(数组),因此由于您正在创建一维数组(数组),因此您只指定一个索引:

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

然后,当您在数组中创建每个项目时,每个项目也是数组,因此然后您可以指定它们的维度(可以不同,因此术语锯齿状 数组):

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

希望对您有所帮助!

关于c# - 多维数组 [][] 与 [,],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12567329/

相关文章:

iphone - 如何在iPhone中的plist中写入多个数组?

C - For 循环在第一次迭代后提前结束

c# - 参数和列表哪个更好

c# - 迭代属性和嵌套的第一级属性

javascript - 从头开始将 JS 数组传递给 PHP 以获取联系表单

python - numpy 数组从另一个数组赋值

java - 如何对二维数组进行列和和行和方法?

python - 从 Python : passing list of numpy pointers 调用 C

c# - 如何修复 : Dynamic SQL generation for the DeleteCommand is not supported against a SelectCommand that does not return any key column information

c# - ViewModel 上的 MVC2 DataAnnotations - 不理解将它与 MVVM 模式一起使用