해시 세트에 의해 물체가 해시되는 방법을 어떻게 제어합니까?

StackOverflow https://stackoverflow.com/questions/967027

  •  12-09-2019
  •  | 
  •  

문제

나는 a를 사용하고있다 HashSet<T> 물체 모음을 저장합니다. 이 객체에는 이미 고유 한 ID가 있습니다 System.Guid, 그래서 나는 차라리 HashSet<> 그 기존 ID를 사용하여 객체를 해시하는 방법을 자체적으로 알아 내려고 노력하십시오. 해싱의 빌드를 무시하고 프로그램의 빌드를 해시 값으로 ID 값의 빌드를 사용하도록 강요하려면 어떻게해야합니까?

또한 내가 알고 있다고 말합니다 Guid 내 물체의 HashSet<>, HashSet<T> 이것을 기반으로합니다 Guid 홀로? 또는 대신 사전을 사용해야합니다.

도움이 되었습니까?

해결책

HashSet<> 키/값 쌍을 기반으로하지 않으며 "키"액세스를 제공하지 않습니다. 해시를 사용하여 격리를 매우 빠르게 점검하는 일련의 고유 한 값 일뿐입니다.

키/값 쌍을 사용하려면 (가져 오기 위해 Guid 나중에) 가장 간단한 옵션은 a Dictionary<Guid,SomeType>. 기존 해시 코드 켜짐 Guid 괜찮아야합니다 (비록 필요하다면 (당신은 여기에 없습니다) 당신은 당신을 제공 할 수 있습니다 IEqualityComparer<T> 해싱에 사용합니다.

다른 팁

무시하십시오 GetHashCode() 당신의 객체에 대한 방법.

물론 여기에는 약간의 주름이 있습니다 ... 안내서는 .NET이 해시 코드에 사용하는 int32보다 큽니다.

왜 이것을 무시해야합니까? 아마도 조기 최적화처럼 보입니다.

예, 사전을 사용하십시오. 애플리케이션을 개발하면 모든 코드의 성능을 측정하는 성능 조정 단계를 살펴보십시오. 이 해싱 함수가 가장 큰 배수로 표시되는 경우에만 더 성능있는 데이터 구조를 고려해야합니다 (어쨌든 하나가있는 경우) :-)

조사해보십시오 System.KeyEdCollection. 핵심 필드에 대한 지식을 컬렉션 구현에 포함시킬 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top