Каковы различия между использованием интервала [] [] и интервалом []? [дубликат]

Лично я пытаюсь использовать CamelCase для классов, mixedCase методы и функции. Переменные являются обычно разделенным подчеркиванием (когда я могу помнить). Таким образом, я могу сказать сразу, что точно я называю, а не все выглядеть одинаково.

9
задан Callum Rogers 21 July 2009 в 13:35
поделиться

9 ответов

Разница в том, что первый образец, int [] [] создает зубчатый массив , а второй создает прямоугольный массив (из размер 2). В зубчатом массиве каждый «столбец» может иметь разный размер. В истинном многомерном массиве каждый «столбец» (в измерении) имеет одинаковый размер. Для получения более полной информации см. Раздел Массив в Руководстве по программированию на C # .

29
ответ дан 4 December 2019 в 05:56
поделиться

int [] [] - это массив массивов или «зубчатый» массив: вы можете использовать это, когда вам нужны разные размеры во втором измерении. Например, первый подмассив может иметь 5 элементов, а второй - 42.

int [,] - двумерный массив: второе измерение одинаково для всего массива. С int [7, 42] второе измерение 42 для всех 7 строк.

9
ответ дан 4 December 2019 в 05:56
поделиться

Вот хорошее сравнение

По сути, int [] [] - это «зубчатый» массив, он выглядит так:

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

Хотя int [,] - это многомерный массив, который всегда имеет одинаковая ширина и высота:

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

У каждого есть свое применение в зависимости от того, чего вы пытаетесь достичь.

12
ответ дан 4 December 2019 в 05:56
поделиться

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];

4
ответ дан 4 December 2019 в 05:56
поделиться

int [] [] называется массивом , он может иметь произвольную длину для каждой строки.

int [,] называется прямоугольным array , где все строки имеют одинаковую длину. Это может быть смоделировано первым.

3
ответ дан 4 December 2019 в 05:56
поделиться

Лучший способ понять разницу - это рассмотреть два способа создания матрицы размера 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-го порядка не обязательно должны быть одинаковой длины.

1
ответ дан 4 December 2019 в 05:56
поделиться

Одна вещь, которую следует учитывать при использовании неровного массива, заключается в том, что вы выделяете несмежные участки памяти. Это хорошо, если у вас есть большой массив больших объектов. Я видел, как SomeThing [n, n] создавал проблемы с StackOverflow, но SomeThing [n] [n] в порядке.

Кроме того, если объект получает> 85 000 байт, он попадает в LOH (куча больших объектов). Коллекции .NET и куча больших объектов (LOH)

0
ответ дан 4 December 2019 в 05:56
поделиться

Вот отличная статья о массивах, очень хорошо освещающая эту тему.

0
ответ дан 4 December 2019 в 05:56
поделиться

вы можете увидеть int [] [] как (int []) [] (int []) - объект

0
ответ дан 4 December 2019 в 05:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: