【问题标题】:What is the difference between int[][] and int[,]? [duplicate]int[][] 和 int[,] 有什么区别? [复制]
【发布时间】:2011-03-28 23:44:55
【问题描述】:

可能重复:
What are the differences between using int[][] and int[,]?

我刚刚发现了这个符号:

int[,]

每当我需要一个矩阵时,我都会使用:

int[][]

有什么区别?什么时候用哪个?

编辑: 感谢您的快速回复。我本来可以想到的。像这样的东西也很难用谷歌搜索。

现在我明白了目的。但是它们与 System.Array 有什么关系呢?

【问题讨论】:

    标签: c#


    【解决方案1】:

    第一个是偶数(每行包含相同数量的元素) 第二个是锯齿状的(每一行可能包含不同数量的元素)

    换一种说法,第一个是多维数组——矩形数组。第二个是数组数组(因此,每个单独的数组可以有不同的长度。)

    【讨论】:

      【解决方案2】:

      int[,] 是一个 矩形 数组 - 一个具有二维的对象。数组的每个元素都是一个整数;所有元素都连续存储在内存中。

      int[][] 是一个锯齿形 数组 - 每个元素依次是一个int[] 的数组。 (所以它是一个数组数组。)虽然“顶级”数组的每个元素都是连续存储的,但这些元素只是对其他数组的引用,这些数组可能位于内存中的任何位置。

      虽然矩形数组每行的列数始终相同,但在锯齿状数组中,每个元素的长度可能不同(或者实际上可能为空)。

      各有优缺点;矩形数组在内存方面更紧凑,但不允许稀疏人口。锯齿状数组在 CLR 中速度更快,但没有那么好的缓存一致性。在某些情况下,锯齿状数组中的“行数组”占用的额外空间可能很重要 - 如果您有一个 int[10000, 2],它只会占用 80000 字节加上一个数组对象的开销,而在锯齿状数组中它会是 80000 字节的数据和 10001 个数组对象的开销。

      MSDN 在其arrays tutorial 中有更多信息。

      【讨论】:

      • 这是我读过的最好的答案(无论问题如何)。
      【解决方案3】:

      int[x,y] 是一个具有固定维度的二维数组(例如int[4,5])。
      int[][] 是一个交错数组,这意味着它是一个数组数组,每个数组可以有不同数量的元素.

      【讨论】:

        【解决方案4】:

        对于创建矩阵,int[,] 更容易。锯齿状数组int[][] 需要更多工作(您需要一个额外的循环到setup the complete matrix)。

        但您可能仍想考虑int[][],因为它是faster

        【讨论】:

          【解决方案5】:

          正如其他人所提到的,int[,] 是一个多维/矩形数组,而int[][] 是一个数组数组,或“锯齿状”数组。

          至于何时使用一个而不是另一个,int[][] 可能很难设置(必须创建每一行),但它似乎总是快一点。 int[,] 的优点是它更简单,并且强制执行规律性,这在您需要时非常适合。 (与数组数组相比,意外替换二维数组中的整行更难。)

          【讨论】:

            猜你喜欢
            • 2012-04-12
            • 2010-11-12
            • 2012-02-15
            • 2013-02-02
            • 2016-07-24
            • 1970-01-01
            • 2011-08-28
            • 1970-01-01
            • 2013-08-14
            相关资源
            最近更新 更多