在C#中多维数组和数组之间有什么区别?

在C#中多维数组和数组之间有什么区别?

多维数组之间有什么区别?double[,]以及数组double[][]在C#?

如果有不同之处,那么对每一个人来说,什么是最好的呢?


慕哥9229398
浏览 690回答 3
3回答

跃然一笑

阵列(锯齿阵列)比多维阵列更快,可以更有效地使用。多维数组具有更好的语法。如果使用交错数组和多维数组编写一些简单的代码,然后使用IL反汇编程序检查编译后的程序集,您将看到从锯齿状(或一维)数组中存储和检索的是简单的IL指令,而对于多维数组的相同操作是方法调用,而方法调用总是比较慢。考虑以下方法:static void SetElementAt(int[][] array, int i, int j, int value){     array[i][j] = value;}static void SetElementAt(int[,] array, int i, int j, int value){     array[i, j] = value;}他们的IL为:.method private hidebysig static void  SetElementAt(int32[][] 'array',                                                     int32 i,                                                     int32 j,                                                     int32 'value') cil managed{   // Code size       7 (0x7)   .maxstack  8   IL_0000:  ldarg.0   IL_0001:  ldarg.1   IL_0002:  ldelem.ref   IL_0003:  ldarg.2   IL_0004:  ldarg.3   IL_0005:  stelem.i4   IL_0006:  ret} // end of method Program::SetElementAt.method private hidebysig static void  SetElementAt(int32[0...,0...] 'array',                                                     int32 i,                                                     int32 j,                                                     int32 'value') cil managed{   // Code size       10 (0xa)   .maxstack  8   IL_0000:  ldarg.0   IL_0001:  ldarg.1   IL_0002:  ldarg.2   IL_0003:  ldarg.3   IL_0004:  call       instance void int32[0...,0...]::Set(int32,                                                            int32,                                                            int32)   IL_0009:  ret} // end of method Program::SetElementAt当使用交错数组时,可以轻松地执行诸如行交换和行大小调整等操作。在某些情况下,使用多维数组可能会更安全,但即使是MicrosoftFxCop也告诉您,在分析项目时,应该使用交错数组而不是多维数组。

蝴蝶刀刀

简单地说,多维数组类似于DBMS中的表。数组(锯齿数组)允许每个元素持有相同类型的变量长度的另一个数组。因此,如果您确信数据的结构看起来像一个表(固定行/列),则可以使用多维数组。锯齿数组是固定的元素&每个元素都可以容纳一个可变长度的数组。例如:Psuedocode:int[,] data = new int[2,2];data[0,0] = 1;data[0,1] = 2;data[1,0] = 3;data[1,1] = 4;将上面的内容看作是一个2x2表:1 | 23 | 4int[][] jagged = new int[3][]; jagged[0] = new int[4] {  1,  2,  3,  4 }; jagged[1] = new int[2] { 11, 12 }; jagged[2] = new int[3] { 21, 22, 23 }; 假设上面的每一行都有可变的列数: 1 |  2 |  3 | 411 | 1221 | 22 | 23
打开App,查看更多内容
随时随地看视频慕课网APP