我正在創建一個3D建模應用程序,該應用程序將頂點點存儲在一堆變量中,每個變量一個。我需要能夠動態添加或移除要求動態添加或移除這些變量的頂點。每個人臉都會通過一個ID鏈接到包含點座標的變量來引用這些點。有沒有辦法在運行時創建和銷燬變量?有沒有更好的方式來完成這與現有的數據類型?我不認爲數組會起作用,因爲這些數據需要是獨立的,以便輕鬆添加或刪除。我也不能直接存儲點的座標,因爲浮點錯誤或其他小的改變會使重複的點彼此相鄰。在運行時創建具有可引用ID的變量
回答
考慮使用Dictionary
(正如Alexei在他的評論中指出的那樣)。字典對於添加,刪除和檢索值非常快速。
對於鍵,選擇包括
- 一種順序
int
- 甲
long
即在頂點基於數據的哈希 - 最壞情況下的的Guid
一種順序int
在許多使用情況下都能正常工作,但如果您有多個請求新ID的線程,則您可能會遇到輕微的爭用他接下來的ID(並確保您遵循線程的最佳實踐)。
A long
散列風險碰撞,例如,如果哈希是從座標導出的,並且您可以使用相同的座標管理多個頂點(具有不同座標的頂點運行散列衝突的正常風險)。
A Guid
對於一個關鍵字來說非常大,特別是如果有很多點,但是保證是唯一的。
謝謝。當你說「Guid非常大」時,你的意思是記憶?如果場景中只有幾千個頂點,這真的很重要嗎? – Keavon
是在內存方面,但是如果你在現代計算機上有幾千個並不重要。在訪問Dictionary時,計算Guid的散列值(一個int和long使用它們的實際值作爲散列鍵)也有一點點成本。這個代價是微不足道的,除非字典在一個緊密的循環中被反覆訪問(在這種情況下,我會以成本爲基準來查看它是否與應用程序有關)。 –
- 1. 運行時創建變量
- 2. 是否有可能在setup.exe運行時創建環境變量
- 3. 在運行時創建實例變量?
- 4. 動態創建變量在運行時
- 5. 如何使用GCC創建運行時可見變量
- 6. 運行時變量創建Python 3.1.2
- 7. C#LINQ創建具有動態索引臨時變量
- 8. 創建具有可變
- 9. 創建具有可變項
- 10. 運行rebuild_index時沒有創建索引
- 11. 爲具有引用成員變量的類創建賦值運算符
- 12. 如何在運行時在bash中使用$創建變量值
- 13. 運行時常量池 - 由運行時創建的變量填充?
- 14. 正在創建具有可變數量元素的數組嗎?
- 15. 創建具有多個變量的宏
- 16. C++程序來重用變量或在運行時創建變量?
- 17. 根據運行時變量的類型創建通用類
- 18. 誰在運行時創建變量(在C++中)
- 19. 在運行時創建的可變參數列表
- 20. PLSQL:可以在運行時創建記錄類型的oracle變量
- 21. 創建具有遞增ID
- 22. 我可以創建在運行時
- 23. 具有可變數量參數的靜態創建器
- 24. 創建具有可變數量Y值的列圖表
- 25. 創建一個變量,其形狀是僅在運行時
- 26. 如何在運行時創建變量名?
- 27. 如何在運行時創建帶有變量名稱的sidekiq隊列?
- 28. 如何創建具有可變PeriodType
- 29. 在具有全局作用域的函數中創建變量?
- 30. 具有可變數量變量的類
您可能正在尋找'字典'... –