【发布时间】:2021-02-07 09:43:50
【问题描述】:
我知道锯齿状数组是数组的数组,其中内部数组的长度可以是任意长度。
对于多维数组,内部数组的长度必须相同。
但是,如果我有一个数组数组(锯齿状),其中所有内部数组的长度相同,那么这个数组和多维数组有什么区别?
【问题讨论】:
标签: c# arrays .net jagged-arrays
我知道锯齿状数组是数组的数组,其中内部数组的长度可以是任意长度。
对于多维数组,内部数组的长度必须相同。
但是,如果我有一个数组数组(锯齿状),其中所有内部数组的长度相同,那么这个数组和多维数组有什么区别?
【问题讨论】:
标签: c# arrays .net jagged-arrays
使用这两种类型的数组,一旦分配,不会有太大的不同。但是在实现和分配上有很多不同。
分配 分配多维数组比较简单。简单地:
new int[4, 2, 3]; 对于锯齿状数组,你需要更多的步骤和循环
实现 多维本质上存储在单个内存块(或内存地址空间)中。对于锯齿状数组,每个子数组都可能位于内存的不同部分。这可能会对缓存和性能产生影响,但更大的影响是您获得 N 次间接访问单个项目或每个维度的查找。对于多维数组,给定 N 个索引,内存位置可以通过 N 个索引算术确定。对于锯齿状数组,您需要为每个索引读取内存,将您带到一个新的内存块。锯齿状数组在存储每个子数组的维度时也有更多的开销,尽管它非常微不足道。
Usage 用于用法,实际上,区别在于更多的边缘情况检查。您可以在访问多维数组之前检查其索引是否在范围内。对于锯齿状数组,为避免引发异常,您需要一次访问每个维度以检查边界。
换句话说,在这种情况下使用多维数组。如果你需要一个交错数组或者它对你的数据模型有意义,那么就使用它,但它更复杂。
【讨论】: