首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >多维数组[][] vs [,]

多维数组[][] vs [,]
EN

Stack Overflow用户
提问于 2012-09-24 14:41:41
回答 5查看 730.4K关注 0票数 507
代码语言:javascript
运行
复制
double[][] ServicePoint = new double[10][9]; // <-- gives an error (1)
double[,] ServicePoint = new double[10,9]; // <-- ok (2)

他们有什么区别?(1)产生错误,原因是什么?

代码语言:javascript
运行
复制
double d = new double[9]
ServicePoint[0] = d;

使用(2)将提示错误。为什么?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-09-24 14:44:16

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

也就是说,double[][]可以有效地:

代码语言:javascript
运行
复制
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数组的引用。使用锯齿数组,您可以按照第二个示例中的要求对数组执行赋值:

代码语言:javascript
运行
复制
x[0] = new double[13];

在第二项中,由于它是统一的2d数组,所以不能将一维数组分配给行或列,因为必须同时索引行和列,这会使您降至单个double

代码语言:javascript
运行
复制
double[,] ServicePoint = new double[10,9];

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

更新

为了根据您的问题澄清,您的#1语法错误的原因是您有以下情况:

代码语言:javascript
运行
复制
double[][] ServicePoint = new double[10][9];

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

代码语言:javascript
运行
复制
double[][] ServicePoint = new double[10][];

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

代码语言:javascript
运行
复制
ServicePoint[0] = new double[13];
ServicePoint[1] = new double[20];

希望这能帮上忙!

票数 563
EN

Stack Overflow用户

发布于 2012-09-24 14:53:54

在第一个例子中,您试图创建一个所谓的锯齿数组。

代码语言:javascript
运行
复制
double[][] ServicePoint = new double[10][9].

如果像下面这样定义,上面的语句就会起作用。

代码语言:javascript
运行
复制
double[][] ServicePoint = new double[10][]

这意味着您正在创建一个大小为10的数组,该数组可以在it.In简单术语中存储10个大小不同的数组-- arrays.see数组,如下所示,它表示一个锯齿状数组。

http://msdn.microsoft.com/en-us/library/2s05feca(v=vs.80).aspx

第二个基本是二维数组,语法是正确的和可接受的。

代码语言:javascript
运行
复制
  double[,] ServicePoint = new double[10,9];//<-ok (2)

要访问或修改二维数组,您必须传递两个维度,但在您的示例中,您只传递一个维度,这就是错误的原因。

正确的用法是

ServicePoint[0][2]引用第一行、第三列上的项。

你的二维数组的图片代表

票数 237
EN

Stack Overflow用户

发布于 2012-09-24 14:45:29

double[][]称为锯齿阵列,声明中未指定内部维度。与矩形阵列不同,每个内部数组都可以是任意长度。每个内部数组都隐式初始化为null,而不是空数组。每个内部数组必须手动创建:引用C# 4.0概括地说是最终引用

代码语言:javascript
运行
复制
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的数字:

代码语言:javascript
运行
复制
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;
票数 70
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12567329

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档