我将顶点保留在列表中,我只想将顶点添加到列表中(如果尚未包含顶点)。如果它不包含它,我将其添加到列表中,然后将索引添加到名为tris的列表中。但是,如果列表确实包含顶点,则应该找到其所在位置的索引,然后将该索引添加到tris列表中。这是我想出的最快的方法。有没有更快的方法?
Hashtable vertIndexes;
List<Vector3> verts;
List<int> tris;
foreach (var vert in vertsOutput)
{
Vector3 p = point + vert;
if(!vertIndexes.Contains(p))
{
vertIndexes.Add(p, verts.Count);
tris.Add(verts.Count);
verts.Add(p);
}
else
{
tris.Add((int)vertIndexes[p]);
}
}
目前,您正在为每个项目执行两个哈希表操作。您可以保存一个:
Dictionary<Vector3, int> vertIndexes;
...
int index;
if(vertIndexes.TryGetValue(p, out index))
//present at given index
else
//not present
TryGetValue
同时测试是否存在并返回存储的值。
使用自定义哈希表可能会更快。Dictionary
具有一些一般性所需的开销,而您不需要。例如,它使用的模运算符非常昂贵,并且不需要哈希值良好的哈希码。但是,这超出了此答案的范围。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句