为了账号安全,请及时绑定邮箱和手机立即绑定

多维数组[]VS[,]

多维数组[]VS[,]

慕仙森 2019-07-13 19:01:14
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)将提示一个错误。为什么?
查看完整描述

3 回答

?
慕桂英4014372

TA贡献1871条经验 获得超13个赞

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

就是,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数组,所以不能将一维数组分配给行或列,因为必须同时索引行和列,这会使您降低到单个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数组,但是一个一维数组(数组),因此由于您正在创建一个一维数组(数组),所以您只指定了一个索引:

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

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

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

希望能帮上忙!


查看完整回答
反对 回复 2019-07-13
?
慕标琳琳

TA贡献1830条经验 获得超9个赞

double[][]被称为锯齿阵列,声明中没有指定内部维度。不像矩形阵列,每个内部数组都可以是任意长度。每个内部数组都隐式初始化为NULL,而不是空数组。必须手动创建每个内部数组:参考[C#4.0]

for (int i = 0; i < matrix.Length; i++){
    matrix[i] = new int [3]; // Create inner array
    for (int j = 0; j < matrix[i].Length; j++)
        matrix[i][j] = i * 3 + j;}

double[,]被称为rectangular arrays,使用逗号来分隔每个维度。下面的代码声明了一个矩形的3×3二维数组,并将其初始化为从0到8的数字:

int [,] matrix = new int [3, 3];for (int i = 0; i < matrix.GetLength(0); i++)
    for (int j = 0; j < matrix.GetLength(1); j++)
        matrix [i, j] = i * 3 + j;


查看完整回答
反对 回复 2019-07-13
  • 3 回答
  • 0 关注
  • 460 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信