可能重複:
What are the differences between using int[][] and int[,]?int [] []和int [,]之間的區別是什麼?
我只是碰到這種表示法來:
int[,]
每當我需要一個矩陣我用:
int[][]
有什麼區別?何時使用哪一個?
編輯: 感謝您的快速回復。我可以想到這一點。谷歌也很難像這樣的東西。
現在我明白了目的。但它們與System.Array有什麼關係?
可能重複:
What are the differences between using int[][] and int[,]?int [] []和int [,]之間的區別是什麼?
我只是碰到這種表示法來:
int[,]
每當我需要一個矩陣我用:
int[][]
有什麼區別?何時使用哪一個?
編輯: 感謝您的快速回復。我可以想到這一點。谷歌也很難像這樣的東西。
現在我明白了目的。但它們與System.Array有什麼關係?
int[,]
是矩形陣列 - 其具有兩個維度一個對象。數組中的每個元素都是一個整數;所有元素都連續存儲在內存中。
int[][]
是鋸齒狀數組 - 其中每個元素依次爲int[]
。 (所以它是一個數組數組。)儘管「頂級」數組的每個元素都是連續存儲的,但這些元素只是對其他數組的引用,這些數組可能在內存中的任何位置。
雖然矩形數組每行總是具有相同的列數,但在鋸齒形數組中,每個元素可以具有不同的長度(或者實際上可以爲空)。
各有各的優缺點;矩形陣列在記憶方面更加緊湊,但不允許稀疏人羣。 Jagged數組在CLR中速度更快,但沒有良好的緩存一致性。在某些情況下,鋸齒陣列中「行陣列」所佔用的額外空間可能很重要 - 如果您有一個僅佔用80000字節加上一個數組對象開銷的int[10000, 2]
,而在鋸齒狀陣列中則是80000字節的數據和10001數組對象的開銷。
MSDN在其arrays tutorial中有更多的信息。
第一個是偶數(每行包含相同數量的元素的) 第二個是鋸齒狀(每一行可包含不同數量的元件)
換一種方式,第一個是多維數組 - 矩形數組。第二個是一個數組的數組(並因此,每個單獨的陣列可以是不同的長度。)
int[x,y]
是具有固定尺寸的二維陣列(例如int[4,5]
)。
int[][]
是一個鋸齒形數組,它表示它是一個數組數組,每個數組可以有不同數量的元素。
對於創建矩陣,int[,]
更容易。鋸齒陣列int[][]
需要更多的工作(您需要一個額外的循環到setup the complete matrix)。
但是你可能仍然想考慮int[][]
,因爲它是faster。
正如其他人所提到的,int[,]
是一個多維/矩形陣列,而int[][]
是一個數組或數組「鋸齒」數組。
至於什麼時候使用一個,int[][]
可能是一個痛苦的設置(每行都必須創建),但它似乎總是快一點。 int[,]
的優勢在於它更簡單,並且執行規則,這使得它在您需要時非常有用。 (更換二維數組中的整行比使用數組陣列更難。)
這是我讀過的最好的答案(不管問題)。 – 2012-05-05 05:08:29