c#中double [*,*]与double [] []之间的差异

时间:2013-07-22 19:13:26

标签: c#

我用过

double [,] marks=new double[26,5] 
int[] function = object.verify(marks) 

public void verifymarks(double[][] marks)

我得到的错误是无法从双[]转换为double [] [] 我试图在互联网上搜索,但找不到任何解决方案。我刚刚开始使用c#。请帮忙。 THankx提前

3 个答案:

答案 0 :(得分:11)

double[][]是锯齿状的。它实际上是一个数组数组。

double[,]是多维的。它得到了特殊的编译器处理。

他们有不同的内存布局。 double[][]是一个包含对其他数组的引用的数组,而double[,]是单维排列的,以便于使用。

另一个不同之处是他们可以容纳哪些数据。锯齿状数组可以是这样的:

1231243245345345345345
23423423423423
2342342343r234234234234234234
23423

虽然多维数组必须是一个完美的表,如下所示:

34534534534534
34534534534533
34534534534534
34534534534545

解决这个问题的方法是使用可空的int

现在,要解决您的问题:

将您的方法签名更改为public void verifymarks(double[,] marks),并在方法中将使用marks[x][y]的任何内容更改为marks[x,y]

答案 1 :(得分:4)

double[][]被称为Jagged array。它是一个数组数组(与创建列表列表的方式相同)。使用此结构,您可以为每个子数组指定不同的大小。

例如:

double[][] jaggedArray = new double[2][];
jaggedArray[0] = new double[5];
jaggedArray[1] = new double[151];

另一个写作double[,]是一个2D数组(一般为Multidimensional array)。你可以把它看成一张桌子。

多维数组的一个非常方便的特性是初始化:

string[,] test = new string[3, 2] { { "one", "two" }, 
                                    { "three", "four" },
                                    { "five", "six" } };

答案 2 :(得分:2)

这是来自LINQPad的Dump()函数的视觉效果。

enter image description here

第一个是double[,],它创建一个矩阵。第二个是double[][],它只是一个数组数组。