2013-11-27 57 views
0

我正在創建一個3D建模應用程序,該應用程序將頂點點存儲在一堆變量中,每個變量一個。我需要能夠動態添加或移除要求動態添加或移除這些變量的頂點。每個人臉都會通過一個ID鏈接到包含點座標的變量來引用這些點。有沒有辦法在運行時創建和銷燬變量?有沒有更好的方式來完成這與現有的數據類型?我不認爲數組會起作用,因爲這些數據需要是獨立的,以便輕鬆添加或刪除。我也不能直接存儲點的座標,因爲浮點錯誤或其他小的改變會使重複的點彼此相鄰。在運行時創建具有可引用ID的變量

+2

您可能正在尋找'字典'... –

回答

1

考慮使用Dictionary(正如Alexei在他的評論中指出的那樣)。字典對於添加,刪除和檢索值非常快速。

對於鍵,選擇包括

  • 一種順序int
  • long即在頂點基於數據的哈希
  • 最壞情況下的的Guid

一種順序int在許多使用情況下都能正常工作,但如果您有多個請求新ID的線程,則您可能會遇到輕微的爭用他接下來的ID(並確保您遵循線程的最佳實踐)。

A long散列風險碰撞,例如,如果哈希是從座標導出的,並且您可以使用相同的座標管理多個頂點(具有不同座標的頂點運行散列衝突的正常風險)。

A Guid對於一個關鍵字來說非常大,特別是如果有很多點,但是保證是唯一的。

+0

謝謝。當你說「Guid非常大」時,你的意思是記憶?如果場景中只有幾千個頂點,這真的很重要嗎? – Keavon

+0

是在內存方面,但是如果你在現代計算機上有幾千個並不重要。在訪問Dictionary時,計算Guid的散列值(一個int和long使用它們的實際值作爲散列鍵)也有一點點成本。這個代價是微不足道的,除非字典在一個緊密的循環中被反覆訪問(在這種情況下,我會以成本爲基準來查看它是否與應用程序有關)。 –