Подтвердить что ты не робот

В чем разница между int [] [] и int [,]?

Возможный дубликат:
В чем разница между использованием int [] [] и int [,]?

Я натолкнулся на это обозначение:

int[,]

Всякий раз, когда мне нужна была матрица, я использовал:

int[][]

В чем разница? Когда использовать какой?

Edit: Спасибо за быстрые ответы. Я мог подумать об этом. Это также трудно для Google для таких вещей.

Теперь я понимаю цель. Но как они относятся к System.Array?

4b9b3361

Ответ 1

int[,] - прямоугольный массив - один объект, который имеет два измерения. Каждый элемент массива является целым числом; все элементы хранятся смежно в памяти.

int[][] - это зубчатый массив - массив, в котором каждый элемент в свою очередь является int[]. (Так что это массив массивов.) Хотя каждый элемент массива "верхнего уровня" хранится смежно, эти элементы являются просто ссылками на другие массивы, которые могут быть где угодно в памяти.

В то время как прямоугольные массивы всегда имеют одинаковое количество столбцов на строку, в неровном массиве каждый элемент может иметь разную длину (или действительно может быть нулевым).

У каждого свои преимущества и недостатки; прямоугольные массивы более компактны с точки зрения памяти, но не позволяют разреженной популяции. Жесткие массивы быстрее в CLR, но не имеют такой хорошей когерентности кэш-памяти. Дополнительное пространство, занимаемое "массивами строк" ​​в зубчатых массивах, может быть значительным в некоторых случаях - если у вас есть int[10000, 2], который будет занимать только 80000 байт плюс накладные расходы одного объекта массива, тогда как в массиве с зубцами он будет быть 80000 байтами для данных и накладными расходами объектов массива 10001.

MSDN имеет дополнительную информацию в своем руководстве по массивам.

Ответ 2

Первое четное (каждая строка содержит одинаковое количество элементов) Второй - зубчатый (каждая строка может содержать различное количество элементов)

Другими словами, первый - это многомерный массив - прямоугольный массив. Второй - массив массивов (и, следовательно, каждый отдельный массив может иметь разную длину.)

Ответ 3

int[x,y] - это двумерный массив с фиксированными размерами (например, int[4,5]).
int[][] - это массив с зазубринами, означающий массив массивов, каждый из которых может иметь различное количество элементов.

Ответ 4

Для создания матрицы int[,] проще. Яркий массив int[][] требует больше работы (вам нужен дополнительный цикл для настроить полную матрицу).

Но вы все равно можете рассмотреть int[][], потому что это быстрее.

Ответ 5

Как и все остальные, int[,] является многомерным/прямоугольным массивом, а int[][] - массивом массивов или массивом "зубчатый".

Что касается того, когда вы используете один над другим, int[][] может быть больно настроено (каждая строка должна быть создана), но, похоже, она всегда будет немного быстрее. Преимущество int[,] заключается в том, что он проще и регулярность применяется, что делает его отличным, когда вам это нужно. (Труднее случайно заменить целую строку в 2D-массиве, чем может быть с массивом массивов.)