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

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

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

慕哥9229398 2019-05-31 13:02:35
在C#中多维数组和数组之间有什么区别?多维数组之间有什么区别?double[,]以及数组double[][]在C#?如果有不同之处,那么对每一个人来说,什么是最好的呢?
查看完整描述

3 回答

?
跃然一笑

TA贡献1826条经验 获得超6个赞

阵列(锯齿阵列)比多维阵列更快,可以更有效地使用。多维数组具有更好的语法。

如果使用交错数组和多维数组编写一些简单的代码,然后使用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也告诉您,在分析项目时,应该使用交错数组而不是多维数组。


查看完整回答
反对 回复 2019-05-31
?
蝴蝶刀刀

TA贡献1801条经验 获得超8个赞


简单地说,多维数组类似于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 | 2

3 | 4

int[][] 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 | 4

11 | 12

21 | 22 | 23


查看完整回答
反对 回复 2019-05-31
  • 3 回答
  • 0 关注
  • 684 浏览

添加回答

举报

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