나는 한 세트의 변수에 버텍스 포인트를 저장할 3D 모델링 앱을 만들고 있습니다. 이러한 변수를 동적으로 추가하거나 제거해야하는 정점을 동적으로 추가하거나 제거 할 수 있어야합니다. 각면은 점 좌표가 포함 된 변수에 연결된 ID로이 점을 참조합니다. 런타임에 변수를 만들고 파괴하는 방법이 있습니까? 기존 데이터 형식으로이를 수행하는 더 좋은 방법이 있습니까? 배열을 쉽게 추가하거나 제거하기 위해 독립적이어야하기 때문에 배열이 작동하지 않을 것이라고 생각합니다. 또한 부동 소수점 오류 또는 기타 작은 변화가 서로 옆에 중복 된 점을 만들기 때문에 점의 좌표를 직접 저장할 수 없습니다.참조 할 수있는 ID로 런타임에 변수 만들기
답변
Dictionary
을 사용하는 것을 고려하십시오 (Alexei는 그의 의견에서 지적했습니다). 사전은 값을 추가, 제거 및 검색하는 경우 매우 빠릅니다.
키에 관해서는, 옵션은
- 순차
int
- GUID를
순차적 정점 데이터에 기초하여 해시
long
int
은 많은 유스 케이스에서 잘 작동하지만 새로운 ID를 요청하는 스레드가 여러 개있는 경우 약간의 경합이 발생할 수 있습니다 그는 다음 ID (그리고 스레딩에 대한 우수 사례를 반드시 준수해야합니다). long
해시 위험 충돌. 해시가 좌표에서 파생 된 경우 동일한 좌표 (서로 다른 좌표를 갖는 정점이 해시 충돌의 일반적인 위험을 감수하는)로 관리중인 여러 정점을 가질 수 있습니다.
Guid
은 키가 상당히 크며, 특히 많은 점이 있지만 고유성이 보장됩니다.
고마워요. "Guid가 꽤 큽니다"라고 말하면 기억의 측면에서 의미합니까? 장면에 단지 수천 개의 정점이 있다면 이것은 정말로 중요할까요? – Keavon
네, 기억면에서는 그렇지만, 근대 컴퓨터에 몇 천 개가 있어도 상관 없습니다. Dictionary에 액세스 할 때 Guid의 해시를 계산하는 데 약간의 비용이 있습니다 (int 및 long은 해시 키로 실제 값을 사용합니다). Dictionary가 엄격한 루프에서 반복적으로 액세스되지 않는 한 비용은 사소한 것입니다 (이 경우 응용 프로그램의 컨텍스트에서 중요한지 확인하기 위해 비용을 벤치마킹합니다). –
- 1. 위치를 기준으로 값을 참조 할 수있는 변수 만들기 COBOL
- 2. id로 테이블 참조
- 3. ID로 참조 마커
- 4. input : text를 #id로 참조 할 수 있습니까?
- 5. ID로 텍스트를 참조 할 필요성 이해하기
- 6. 런타임에 C# 추가 참조
- 7. 런타임에 열거 만들기/수정
- 8. 런타임에 테스트 만들기
- 9. 런타임에 usercontrol 만들기
- 10. 런타임에 ID로 WebView를 충돌시키는 이유는 무엇입니까?
- 11. 런타임에 개체에 대한 참조 찾기
- 12. 참조 할 수있는 노드 제한
- 13. 특정 ID로 연결되는 링크 만들기
- 14. 개체, 로컬 변수 대 rvalue 참조 만들기
- 15. 현재 기능을 참조 할 수있는 방법이 있습니까?
- 16. 런타임에 함수 만들기
- 17. 런타임에 클래스를 강제로드 할 수있는 방법이 있습니까?
- 18. XCTest : 런타임에 클래스를 삽입 할 수있는 방법
- 19. 확장하지 않고 ID로 필드 참조
- 20. Android : 런타임에 EditText 만들기
- 21. 런타임에 TextBlock 만들기
- 22. 런타임에 컨트롤 만들기
- 23. Delphi로 런타임에 TWebBrowser 만들기
- 24. 런타임에 클래스의 인스턴스 만들기
- 25. 런타임에 새 메서드 만들기
- 26. 런타임에 클래스 만들기
- 27. Wicket 런타임에 새 탭 만들기
- 28. 레일에서 여러 컨트롤러로 정의하고 액세스 할 수있는 변수 만들기
- 29. 런타임에 참조 된 프로젝트에 액세스하십시오.
- 30. 런타임에 변수 이름 구성
아마도'Dictionary '을 찾고있을 것입니다 ... –