【问题标题】:What is the difference between a multi-dimensional array and a jagged array where all dimensions of the arrays are equal? [duplicate]多维数组和数组的所有维度都相等的锯齿状数组有什么区别? [复制]
【发布时间】:2021-02-07 09:43:50
【问题描述】:

我知道锯齿状数组是数组的数组,其中内部数组的长度可以是任意长度。

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

但是,如果我有一个数组数组(锯齿状),其中所有内部数组的长度相同,那么这个数组和多维数组有什么区别?

【问题讨论】:

    标签: c# arrays .net jagged-arrays


    【解决方案1】:

    使用这两种类型的数组,一旦分配,不会有太大的不同。但是在实现和分配上有很多不同。

    分配 分配多维数组比较简单。简单地: new int[4, 2, 3]; 对于锯齿状数组,你需要更多的步骤和循环

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

    Usage 用于用法,实际上,区别在于更多的边缘情况检查。您可以在访问多维数组之前检查其索引是否在范围内。对于锯齿状数组,为避免引发异常,您需要一次访问每个维度以检查边界。

    换句话说,在这种情况下使用多维数组。如果你需要一个交错数组或者它对你的数据模型有意义,那么就使用它,但它更复杂。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-24
      • 2015-11-13
      • 1970-01-01
      • 2014-12-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多