C# 多维数组和所有维数相等的锯齿数组之间有什么区别?

C# 多维数组和所有维数相等的锯齿数组之间有什么区别?,c#,arrays,.net,jagged-arrays,C#,Arrays,.net,Jagged Arrays,我知道交错数组是数组的数组,其中内部数组的长度可以是任意长度 对于多维数组,内部数组都必须具有相同的长度 但是如果我有一个交错排列的数组,其中所有内部数组的长度都相同,那么这个数组和多维数组有什么区别呢?使用这两种类型的数组,一旦分配,就不会有太大的不同。但在实施和分配方面存在很多差异 分配分配多维数组更简单。简单地说: 新整数[4,2,3];对于锯齿阵列,需要更多的步骤和循环 多维实现基本上存储在单个内存块或内存地址空间中。对于交错数组,每个子数组都可能位于内存的不同部分。这可能会对缓存和性能

我知道交错数组是数组的数组,其中内部数组的长度可以是任意长度

对于多维数组,内部数组都必须具有相同的长度


但是如果我有一个交错排列的数组,其中所有内部数组的长度都相同,那么这个数组和多维数组有什么区别呢?

使用这两种类型的数组,一旦分配,就不会有太大的不同。但在实施和分配方面存在很多差异

分配分配多维数组更简单。简单地说: 新整数[4,2,3];对于锯齿阵列,需要更多的步骤和循环

多维实现基本上存储在单个内存块或内存地址空间中。对于交错数组,每个子数组都可能位于内存的不同部分。这可能会对缓存和性能产生影响,但更大的影响是您获得N个间接访问单个项,或每个维度的查找。对于多维数组,给定N个索引,可以通过N个索引以算术方式确定内存位置。对于锯齿状数组,需要为每个索引读取内存,以获得新的内存块。锯齿阵列存储每个子阵列的维数时,开销也要大得多,尽管这一开销非常小

用法对用法,实际上,区别在于更多的边缘情况检查。您可以在访问多维数组之前检查其维度,以确定索引是否在范围内。对于交错数组,为了避免抛出异常,您需要一次访问一个维度来检查边界

换句话说,在本例中使用多维数组。如果您需要一个锯齿状数组,或者它对您的数据模型有意义,那么就使用它,但它更复杂