2011-03-31 131 views
5

我一直在咀嚼這一段時間,我想我會打開一個問題,並試圖獲得一些關於它的想法。也許有些東西會引發一個燈泡。需要非常大的數據結構。尋找想法

我需要建立一個六角形網格,並且這個六角形網格將是最小10 x 10和最大500x500 - 並且可能更大。這顯然是高端電網,自然必須分解。

這是問題的主要部分。

  • 500x500網格的六邊形。約。
  • 他們不經常改變,但他們可以改變。
  • 將其分解爲50x50或100x100的部分是非常可行的,但有可能有人可能從地圖的一端跑到另一端,所以我需要能夠在某個時刻處理整個事情,即使它是分段的。
  • 這顯然會造成大的內存消耗。

我可以將數據(共享變量)存儲爲簡單的byteArray或甚至在plainText中。每個十六進制的信息非常簡單,只是有多少。我不「保存」數據。 (將是一個功能)

每個六邊形的基本結構是:

  • 十六進制顏色(與輪廓明顯) (或位圖圖片)阻擊器 任何人!
  • 帶有數字的TextField。 (最大2 數字)

這幾乎是所有需要的信息。

如果沒有十六進制變化的可能性,這將是相當微不足道的。

所以我很好奇,如果有人對此有任何想法。 (任何絕對真理都不會是壞的;)

編輯:哦,關於hexes的信息通過tcp流。這不是一個問題,就像我說的那樣,每個十六進制的數據是簡單的,我的解析器閃電般快,所以這不是問題。

更新:必須創建和維護250,000個對象(hexes)的可能性是我主要問這個問題。這就是我尋找想法的原因。 (閃存中的250k對象很好)

+0

從描述中不太清楚問題是什麼。一個相當小的數據結構的500x500陣列在內存中不會很大。如果您需要存儲的只是RGB顏色和int,則只能是幾兆字節。究竟是什麼問題? – 2011-03-31 02:06:42

+0

250,000個可能的對象是我問爲什麼。只是爲了地圖。 – Feltope 2011-03-31 02:07:53

+2

如果對象很大,250,000個對象只是一個問題。但是你指定你的數據結構有一個顏色(4字節)和一個int(4字節)。這是少量的數據(〜2MB)。你需要同時顯示多少這些六角形的東西?據推測,並非所有250,000在同一時間... – 2011-03-31 02:41:35

回答

4

每個六邊形的基本結構是:

* hex color (with outline obviously) (or a bitmap picture) blitting anyone! 
* TextField with a number in it. (max 2 digits) 

我想你並不需要存儲所有250K文本字段和位圖,因爲他們是應該只存在在屏幕上。將這些數據打包成少量字節 - 最多2位數字是7位,從調色板添加顏色標識(如果需要truecolor,則添加24位顏色)和位圖標識。如果您創建相同大小的結構,則可以將它們寫入ByteArray。這將使您擺脫250K對象引用並防止可能的內存碎片。
然後,您只需要爲這些字節創建包/解包函數到一些可用的對象中(不要忘記對象池),並使用aththods從ByteArray正確地獲取它們。正如其他人指出的,如果將單元格數據打包到int對中,250K單元並不多。

2

也許你可以將此作爲重複數據刪除的練習?例如,有不超過100個不同的文本值可以與你的格子相關聯。假設你只使用少量不同的十六進制顏色(比如說小於20),那麼相對較小的一組十六進制實例可以代表每個可能的十六進制配置。所以,你可以有一個效用函數一樣(不是有效的ActionScript語法,不好意思):

Hex getHex(int color, String label)

...進行檢查,看是否有六角已經給定配置存在,只創建一個新的Hex實例如果還不存在的話。

因此,您的數組中仍然有250,000個引用(或者用於跟蹤您的hexes的任何結構),但實際對象實例的數量要少得多。似乎應該可以管理,即使在Flash中也是如此。

當然,如果創建完成後可變的話,你將會非常小心。