我有程序,我必須使用極端大數組。 我需要使用二維數組。將C#數組索引類型更改爲Int64
我用過古典bool[,]
,但是當我試圖在索引太大的時候聲明它時拋出了System.OutOfMemoryException
。 (使用bool[,] foo = new bool[width + bar, height]
)。兩個數字width
和bar
都非常大,所以我想它只是超過了指數。
如何將索引類型更改爲Int64(long)?我知道我可以使用Dictionary<ulong, bool>
,但它會迫使我重寫我的應用程序中的幾乎所有代碼,並且我發現數組更適合使用Dictionary進行工作,特別是當我已經有我需要的LINQ方法並且我不知道時,如果它能用於二維字典。
謝謝,彼得
編輯1: 下面的代碼(注:我剛剛與sizeX = 2000000000
測試它,它拋出異常):
bool[,] pole = new bool[sizeX, maxY];
的問題是,我有許多對象的X,Y長度和X長度(Y總是0)。我有一個數組,在每個位置上,有或者不是對象拼貼。
因此,我只是得到座標X,寬度&高度和位置瓷磚到陣列。
的一點是,X可以是負,所以當我需要例如位置10周的目的,我得到最低X(並保存例如largestNegativeX = -999
)和定位物體進入陣列之前,我添加到每個對象的X object.X += -largestNegativeX
。然後我找出數組的寬度(例如2000000000
)並嘗試聲明數組。這是拋出異常的地方。
使用[BitArray](https://msdn.microsoft.com/en-us/library/system.collections.bitarray(v = vs.110).aspx)。它將bool值存儲爲位並消耗更少的內存。 –
這看起來可能是一個xy問題。如果您詢問您的特定用例,您可能會得到更好的解決方案。 – Logarr
在這裏使用字典沒有什麼錯誤 –