목록에 정점을 유지하고 있는데, 정점을 아직 포함하지 않은 경우에만 정점을 목록에 추가하려고합니다. 그것이 포함되어 있지 않으면 목록에 추가 한 다음 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]);
}
}
색인으로 'for'를 사용하는 것이'foreach'보다 빠르다는 것을 읽었습니다. 그것 이외에 여러분은'Dictionary'을 사용할 수 있는데, 이것은 정점 O (1)을 찾게합니다. –
@ThorstenDittmar - Hashtable에는 O (1)도 있습니다.이 태그는 사전 <>으로 일반화되어 있지 않으므로 복싱/언 박싱에 비용을 지불하고 있습니다. 또한 해시 테이블 (또는 사전 <>)은 실제 채우기 1/3보다 큰 용량을 가지도록 할당해야합니다. 개인적인 경험에서 가장 좋습니다. –
나는 @ThorstenDittmar에 동의하지만 사전이 아니라'HashSet' –