從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 [] x;有什麼區別?和int x [];?
- 2. int(1)和int(8)有什麼區別?
- 3. void(int)和void(*)(int)有什麼區別?
- 4. 「int * a = new int」和「int * a = new int()」有什麼區別?
- 5. swap(int&a,int&b)和swap(int * a,int * b)。有什麼區別?
- 6. SML中int - > int - > int和(int * int) - > int有什麼區別?
- 7. make([] int,0),[] int {}和* new([] int)有什麼區別?
- 8. long unsigned int和unsigned long int有什麼區別int
- 9. int和char數組有什麼區別?
- 10. NSUInteger myID和int myID有什麼區別?
- 11. (int)和intval()之間有什麼區別?
- 12. int和long有什麼區別?
- 13. operator ++()和operator ++(int)有什麼區別?
- 14. int和NSInteger有什麼區別?
- 15. func foo(arr [] int)int和func foo(arr [num] int)有什麼區別int
- 16. 「long int a = 2」和「int a = 2L」有什麼區別?
- 17. 新的int和new(int)之間的C++有什麼區別?
- 18. 「const int&jj」和「int&const jj」有什麼區別?
- 19. 在Scala中Tuple2和(Int,Int)有什麼區別?
- 20. phpmyadmin中的int(1)和int(2)有什麼區別
- 21. C++:int * x [5]和int(* x)[5]之間有什麼區別?
- 22. 'int?'有什麼區別和'int'在C#中?
- 23. static int a和int a有什麼區別?
- 24. Java中的public int和int有什麼區別?
- 25. C中的「short int」和「int」有什麼區別?
- 26. C中的int * ptr和int * ptr有什麼區別?
- 27. C中`extern int(x)[]`和`extern int x []`有什麼區別?
- 28. 局部變量auto int a和int a有什麼區別?
- 29. 是什麼INT主要的區別(INT,CHAR **)和INT主(INT ARGC,字符** argv的)
- 30. Int到BigInteger,有什麼區別?
這裏是在性能方面的一些想法:http://stackoverflow.com/問題/ 168897/whats-better-in-regards-to-performance-type-type-type – 2009-07-21 13:39:47