2013-11-27 54 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使用它们的实际值作为散列键)也有一点点成本。这个代价是微不足道的,除非字典在一个紧密的循环中被反复访问(在这种情况下,我会以成本为基准来查看它是否与应用程序有关)。 –