Исходя из фона perl, я всегда определял 2D-массив, используя int[][]
. Я знаю, что вы можете использовать int[,]
, а в чем же разница?В чем разница между использованием int [] [] и int [,]?
ответ
Разница заключается в том, что первый образец, int [] [] создает jagged array, а второй создает rectangular array (размерности 2). В зазубренном массиве каждый «столбец» может иметь разный размер. В истинном многомерном массиве каждый «столбец» (в измерении) имеет одинаковый размер. Для получения более полной информации см. Array section из C# Programming Guide.
int [] [] - массив массивов или массив с «зубчатыми» элементами: вы можете использовать это, когда хотите выбрать разные размеры во втором измерении. Например, первый вспомогательный массив может иметь 5 элементов, а второй может иметь 42.
int [,] - двумерный массив: второе измерение одинаково по всему массиву. При int [7, 42] второе измерение составляет 42 для всех 7 линий.
Взял слова прямо изо рта. – MyItchyChin
В основном ИНТ [] [] является "неровным" массивом, это выглядит следующим образом:
[] -> [1, 2, 3]
[] -> [1, 2]
[] -> [1, 2, 3, 4]
В то время как INT [,] является многомерным массивом, который всегда имеет ту же ширину и высота:
[1, 2, 3, 4
5, 6, 7, 8
9, 1, 2, 3]
Каждый из них имеет свои применения в зависимости от того, что вы пытаетесь выполнить.
Jagged - каждая строка может иметь разные длины столбцов. Многомерный - каждая строка имеет ту же длину столбца. – Will
int [] [] - это зубчатый массив, где int [,] - двумерный массив.
явно
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]
у вас не может быть [2,2];
int [] [] называется массивом массивов, он может иметь произвольную длину для каждой строки.
int [,] называется прямоугольником , где все строки имеют одинаковую длину. он может быть смоделирован первым.
Одна вещь, которую следует учитывать в отношении массива с зазубринами, заключается в том, что вы выделяете несмежные куски памяти. Это хорошо, если у вас большой массив больших объектов. Я видел, как SomeThing [n, n] создает проблемы StackOverflow, но SomeThing [n] [n] будет в порядке.
Кроме того, если объект получает> 85 000 байт, он переходит в LOH (Large Object Heap). .NET Collections and the Large Object Heap (LOH)
Here отличная статья о массивах, охватывающая эту тему очень хорошо.
Лучший способ понять разницу, чтобы посмотреть на двух способов создать матрицу 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. В чем разница между int ++ и ++ int?
- 2. В чем разница между int [] [] и int [,]?
- 3. В чем разница между [] int и int []
- 4. Разница между 'int' и 'int?'
- 5. В чем разница между int -> int -> int и (int * int) -> int в SML?
- 6. В чем разница между [Int] и Array <Int>?
- 7. В чем разница между int и extern int в C?
- 8. В чем разница между int: Int и var в swift
- 9. В чем разница между int и (int) в C?
- 10. В чем разница между public int и int в Java?
- 11. В чем разница между 'int?' и 'int' в C#?
- 12. Разница между Int() и Int: в Swift
- 13. В чем разница между int [] и Integer []
- 14. В чем разница между Int * и Int А [размер]
- 15. В чем разница между int var [] и int var [0]
- 16. В чем разница между void (int) и void (*) (int)?
- 17. В чем разница между «int myInt;» и "int myInt = 0;"
- 18. В чем разница между static int a и int a?
- 19. В чем разница между int [] x; и int x [] ;?
- 20. разница между int * i и int * i
- 21. Разница между int * i и int ** i
- 22. Разница между int cast и int & cast
- 23. В чем разница между «int * a = new int» и «int * a = new int [5]»?
- 24. В чем разница между CArray <int, int> и CArray <int, int&>?
- 25. В чем разница между «int * a = new int» и «int * a = new int()»?
- 26. Разница между int и Integer
- 27. Разница между const int и int literal
- 28. разница между преобразованием типов (INT **) и Int (*)
- 29. C++ Разница между 'int' и 'INT'
- 30. Разница между int и double
Вот некоторые мысли с точки зрения производительности: http://stackoverflow.com/ Вопросы/168897/whats-better-in-regards-to-performance-type-or-type –