代码之家  ›  专栏  ›  技术社区  ›  Callum Rogers

使用int[][]和int[,]之间有什么区别?[副本]

  •  9
  • Callum Rogers  · 技术社区  · 16 年前

    来自perl背景,我总是使用 int[][] . 我知道你可以用 int[,]

    9 回复  |  直到 16 年前
        1
  •  29
  •   ThuggerThug    8 年前

    这里的区别在于,第一个示例int[][]创建了一个 jagged array ,而第二个创建 rectangular array Array section C# Programming Guide .

        2
  •  12
  •   Community Mohan Dere    8 年前

    Here's a good comparison

    基本上int[][]是一个“锯齿状”数组,它如下所示:

    [] -> [1, 2, 3]
    [] -> [1, 2]
    [] -> [1, 2, 3, 4]
    

    而int[,]是一个多维数组,其宽度和高度始终相同:

    [1, 2, 3, 4
     5, 6, 7, 8
     9, 1, 2, 3]
    

        3
  •  9
  •   jrcs3    16 年前

    int[][]是一个数组数组或“锯齿”数组:当您希望在第二维度中使用不同的大小时,可以使用它。例如,第一个子数组可以有5个元素,第二个子数组可以有42个元素。

    int[,]是一个二维数组:第二个维度在整个数组中都是相同的。对于int[7,42],所有7条线的第二个维度都是42。

        4
  •  4
  •   kemiller2002    16 年前

    明显地

    var a = int[][]
    

    允许您拥有如下数组:

    a[0] = new int[2];
    a[1] = new int[5];
    

    var a = int[2,2];
    
    a[0,0]
    a[0,1]
    a[1,0]
    a[1,1]
    

        5
  •  3
  •   Khaled Alshaya    16 年前

    int[][]称为 数组的数组

    int[,]被称为 ,其中所有行的长度都相同。它可以用第一个来模拟。

        6
  •  1
  •   Henk Holterman    16 年前

    理解差异的最佳方法是查看创建nxn矩阵的两种方法:

    const int n = 8, m = 8;
    
    int[,] matrix1 = new int[n,m];
    
    int[][] matrix2 = new int[n][];
    for (int i = 0; i < matrix2.Length; i++) { matrix2[i] = new int[m]; }
    
    matrix1[1,1] = matrix2[2][2];
    

    正如您所看到的,第二个更复杂,因为您需要for循环来完全创建它。它通常被称为锯齿状数组,因为二阶数组不需要全部具有相同的长度。

        7
  •  0
  •   Community Mohan Dere    8 年前

    此外,如果对象获得>85000字节,它进入LOH(大对象堆)。 .NET Collections and the Large Object Heap (LOH)

        8
  •  0
  •   Fabrício Matté    16 年前

    Here 这是一篇关于数组的优秀文章,很好地涵盖了这个主题。

        9
  •  0
  •   Edwin Tai    16 年前

    您可以看到int[]]和(int[])[] (int[])是一个对象