从perl背景来看,我总是使用int[][]
定义了一个2D数组。我知道你可以用int[,]
代替,所以有什么区别?使用int [] []和int [,]有什么区别?
回答
这里的区别在于第一个示例int [] []创建了jagged array,而第二个示例创建了rectangular array(第二维)。在锯齿状数组中,每个“列”可以具有不同的大小。在真正的多维数组中,每个“列”(在维度中)的大小相同。有关更完整的信息,请参阅C# Programming Guide的Array section。
int [] []是一个数组或“锯齿状”数组的数组:当您需要第二维中的不同大小时,可以使用此数组。例如,第一个子阵列可以有5个元素,第二个子阵列可以有42个。
int [,]是一个二维数组:第二维在整个数组中是相同的。使用int [7,42],第二维对于所有7行都是42。
把话说出来。 – MyItchyChin 2009-07-21 13:39:52
基本上INT [] []是一个 “锯齿状” 阵列,它看起来像这样:
[] -> [1, 2, 3]
[] -> [1, 2]
[] -> [1, 2, 3, 4]
虽然INT [,]是总是具有相同的宽度的多维阵列和高度:
[1, 2, 3, 4
5, 6, 7, 8
9, 1, 2, 3]
每个人都有这取决于你想完成什么及其用途。
锯齿 - 每个“行”可以有不同的'列'长度。多维 - 每个“行”具有相同的“列”长度。 – Will 2009-07-21 13:54:10
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 [,]被称为矩形阵列,其中所有行具有相同的长度。它可以被第一个模拟。
有关交错数组需要考虑的一件事是您正在分配非连续的内存块。如果你有大量的大对象,这是一件好事。我见过SomeThing [n,n]创建StackOverflow问题,但SomeThing [n] [n]没问题。
此外,如果一个对象获取> 85,000字节,它会转到LOH(大对象堆)。 .NET Collections and the Large Object Heap (LOH)
Here是关于数组的优秀文章,涵盖了这个话题。
理解上的差异,最好的办法是看两个方面来创建一个n×n的矩阵:
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循环到完全创建它。它通常被称为锯齿状数组,因为二阶数组不需要全部具有相同的长度。
你可以看到INT [] []为(INT [])[] (INT [])是一个对象
- 1. int(1)和int(8)有什么区别?
- 2. swap(int&a,int&b)和swap(int * a,int * b)。有什么区别?
- 3. long unsigned int和unsigned long int有什么区别int
- 4. int和NSInteger有什么区别?
- 5. int和char数组有什么区别?
- 6. func foo(arr [] int)int和func foo(arr [num] int)有什么区别int
- 7. 新的int和new(int)之间的C++有什么区别?
- 8. “const int&jj”和“int&const jj”有什么区别?
- 9. static int a和int a有什么区别?
- 10. Java中的public int和int有什么区别?
- 11. 'int?'有什么区别和'int'在C#中?
- 12. CArray <int, int>和CArray <int, int&>有何区别?
- 13. int *和Type *有区别吗?
- 14. int [] []和int [,]之间的区别是什么?
- 15. char *和int *的区别是什么?C++ char * vs int *
- 16. 可空<int>与int? - 有什么区别吗?
- 17. INT(10)和INT(12)之间有什么区别(应用于我的代码时)?
- 18. 在C++中int和r = x和r = y有什么区别?
- 19. 对于一个struct vertex,map [int] vertex和map [int] * vertex有什么区别?
- 20. int p = *(int *)i和int p = *(int *)&i之间的区别
- 21. Cassandra数据类型中的INT和VARINT有什么区别?
- 22. a // b和int(a/b)之间有什么区别?
- 23. C++中的Uint32和unsigned int有什么区别?
- 24. OWL int和整数类型有什么区别
- 25. OpenCL中的int和cl_int有什么区别?
- 26. 函数int get()和istream&get(char&c)有什么区别
- 27. 传递sbrk()intptr_t和int在C中有什么区别
- 28. onItemClick在Android中的“int”和“long”参数有什么区别
- 29. setColorSchemeColors(int ... colors)和setColorSchemeResources(int ... colorResIds)和setColorScheme(int ... colors)有什么不同?
- 30. int someInts [3]和int * someInts = new int [3]之间的区别?
这里是在性能方面的一些想法:http://stackoverflow.com/问题/ 168897/whats-better-in-regards-to-performance-type-type-type – 2009-07-21 13:39:47