跃然一笑
阵列(锯齿阵列)比多维阵列更快,可以更有效地使用。多维数组具有更好的语法。如果使用交错数组和多维数组编写一些简单的代码,然后使用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