2009-07-21 208 views
9

從perl背景來看,我總是使用int[][]定義了一個2D數組。我知道你可以用int[,]代替,所以有什麼區別?使用int [] []和int [,]有什麼區別?

+1

這裏是在性能方面的一些想法:http://stackoverflow.com/問題/ 168897/whats-better-in-regards-to-performance-type-type-type – 2009-07-21 13:39:47

回答

29

這裏的區別在於第一個示例int [] []創建了jagged array,而第二個示例創建了rectangular array(第二維)。在鋸齒狀數組中,每個「列」可以具有不同的大小。在真正的多維數組中,每個「列」(在維度中)的大小相同。有關更完整的信息,請參閱C# Programming GuideArray section

9

int [] []是一個數組或「鋸齒狀」數組的數組:當您需要第二維中的不同大小時,可以使用此數組。例如,第一個子陣列可以有5個元素,第二個子陣列可以有42個。

int [,]是一個二維數組:第二維在整個數組中是相同的。使用int [7,42],第二維對於所有7行都是42。

+1

把話說出來。 – MyItchyChin 2009-07-21 13:39:52

12

Here's a good comparison

基本上INT [] []是一個 「鋸齒狀」 陣列,它看起來像這樣:

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

雖然INT [,]是總是具有相同的寬度的多維陣列和高度:

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

每個人都有這取決於你想完成什麼及其用途。

+1

鋸齒 - 每個「行」可以有不同的'列'長度。多維 - 每個「行」具有相同的「列」長度。 – Will 2009-07-21 13:54:10

4

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

3

int [] []被稱爲數組陣列,它可以有每行的任意長度。

int [,]被稱爲矩形陣列,其中所有行具有相同的長度。它可以被第一個模擬。

0

有關交錯數組需要考慮的一件事是您正在分配非連續的內存塊。如果你有大量的大對象,這是一件好事。我見過SomeThing [n,n]創建StackOverflow問題,但SomeThing [n] [n]沒問題。

此外,如果一個對象獲取> 85,000字節,它會轉到LOH(大對象堆)。 .NET Collections and the Large Object Heap (LOH)

0

Here是關於數組的優秀文章,涵蓋了這個話題。

1

理解上的差異,最好的辦法是看兩個方面來創建一個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循環到完全創建它。它通常被稱爲鋸齒狀數組,因爲二階數組不需要全部具有相同的長度。

0

你可以看到INT [] []爲(INT [])[] (INT [])是一個對象

相關問題