我正在创建一个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. 具有可变数量变量的类
您可能正在寻找'字典'... –