2012-11-02 1 views
1

TDictionary의 키로 TTime을 사용하고 싶지만 TTime 비교에 문제가있어서 이에 대한 대안을 찾고 있습니다.TDictionary의 키로 TTime 사용

내 특정 문제는 옆에있는 시간과 함께 일종의 의제를 만들려고 노력하고 있는데, TTime 개체로 표시되어 있으며 상단의 좌표와 함께 TDictionary에 저장합니다. 그리드에 그리려는 작업 시간을 감안할 때, 작업 시간을 기준으로 사전에서 사전에 상위 좌표를 쉽게 검색 할 수 있습니다. 불행히도 TTime comparisons give unexpected results 때문에 작동하지 않습니다. TTime으로 사전에서 좌표를 안정적으로 검색 할 수 없습니다.

이 문제를 해결할 방법
  • ?
  • 당신은 전부 TDictionary 일을 건너 뛰고 다른 접근 방식으로 갈 것인가?
+2

나는이 완벽하게 유효한 질문이다 생각하고 downvoters 자신을 설명하는 것을 내가 좋아하는 것입니다. 당신이 내 링크 된 질문을 봤다면 그것은 작동하지 않습니다 –

+1

가 작동하지 않는 이유 당신이 이해할 수있는, –

+1

충분하지 않습니다. 내 질문을 편집 @DavidHeffernan –

답변

7

TDictionary 생성자는 IEqualityComparer<TKey> 인수를 허용합니다.이 인수는 키 값을 비교하는 데 사용됩니다. (TEqualityComparer로부터 상속) TTime위한 해당 인터페이스를 구현하고 비교를 수행하도록 SameTime를 사용한다.

+1

좋은 답변입니다. 아마도 TEqualityComparer.Construct를 사용하는 것이 가장 편리 할 것입니다. 허쉬 함수를 작성하는 것은 약간 까다로울 수 있습니다. 그렇게하려면 SameTime의 구현과 호환되도록해야합니다. –

+2

해시 코드는 해쉬 된 값에 고유 한 것이면 원하는 어떤 것이 될 수 있습니다. 이후 그것은'TTime'이 될 것이므로 시간, 분, 초 및 밀리 초 컴포넌트로 디코딩 한 다음 단일 Integer로 비트 시프트 할 것을 제안합니다. 그들은 잘 맞을 것입니다. (시간은 5 비트가 필요합니다. 분과 초는 각각 6 비트가 필요하고, 밀리 초는 10 비트가 필요합니다. 총 27 비트입니다.) 정밀도를 잃지는 않을 것입니다. –

+2

DateTimeToTimeStamp는 TTime의 정확한 표현 인 것보다 유리한 고유 한 정수를 생성합니다. ;-) –