Лично я пытаюсь использовать CamelCase для классов, mixedCase методы и функции. Переменные являются обычно разделенным подчеркиванием (когда я могу помнить). Таким образом, я могу сказать сразу, что точно я называю, а не все выглядеть одинаково.
Разница в том, что первый образец, int [] [] создает зубчатый массив , а второй создает прямоугольный массив (из размер 2). В зубчатом массиве каждый «столбец» может иметь разный размер. В истинном многомерном массиве каждый «столбец» (в измерении) имеет одинаковый размер. Для получения более полной информации см. Раздел Массив в Руководстве по программированию на C # .
int [] [] - это массив массивов или «зубчатый» массив: вы можете использовать это, когда вам нужны разные размеры во втором измерении. Например, первый подмассив может иметь 5 элементов, а второй - 42.
int [,] - двумерный массив: второе измерение одинаково для всего массива. С int [7, 42] второе измерение 42 для всех 7 строк.
По сути, int [] [] - это «зубчатый» массив, он выглядит так:
[] -> [1, 2, 3]
[] -> [1, 2]
[] -> [1, 2, 3, 4]
Хотя int [,] - это многомерный массив, который всегда имеет одинаковая ширина и высота:
[1, 2, 3, 4
5, 6, 7, 8
9, 1, 2, 3]
У каждого есть свое применение в зависимости от того, чего вы пытаетесь достичь.
int [] [] - это зубчатый массив, где int [,] - двумерный массив.
просто
var a = int[][]
позволяет вам иметь такой массив:
a[0] = new int[2];
a[1] = new int[5];
где, как и в случае с int [,], у вас всегда должна быть одна и та же вторая часть массива:
var a = int[2,2];
a[0,0]
a[0,1]
a[1,0]
a[1,1]
у вас не может быть [2,2];
int [] [] называется массивом , он может иметь произвольную длину для каждой строки.
int [,] называется прямоугольным array , где все строки имеют одинаковую длину. Это может быть смоделировано первым.
Лучший способ понять разницу - это рассмотреть два способа создания матрицы размера 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];
Как видите, второй вариант немного сложнее, потому что вам нужна цикл, чтобы полностью его создать. Его часто называют зубчатым массивом, потому что массивы 2-го порядка не обязательно должны быть одинаковой длины.
Одна вещь, которую следует учитывать при использовании неровного массива, заключается в том, что вы выделяете несмежные участки памяти. Это хорошо, если у вас есть большой массив больших объектов. Я видел, как SomeThing [n, n] создавал проблемы с StackOverflow, но SomeThing [n] [n] в порядке.
Кроме того, если объект получает> 85 000 байт, он попадает в LOH (куча больших объектов). Коллекции .NET и куча больших объектов (LOH)
Вот отличная статья о массивах, очень хорошо освещающая эту тему.
вы можете увидеть int [] [] как (int []) [] (int []) - объект