2012-11-02 28 views
1

我想使用TTime作爲TDictionary的關鍵字,但是我遇到了TTime比較的問題,因此我正在尋找替代方法。使用TTime作爲TDictionary的關鍵字

我特別的問題是,我試圖用一個TTime對象來表示一些類型的議程,並將它們與TDictionary一起存儲在頂部座標中。考慮到我想在網格上繪製任務的小時數,我可以根據任務的小時數從字典中輕鬆地檢索其頂部座標。不幸的是,它不起作用,因爲TTime comparisons give unexpected results。我無法可靠地從字典中以TTime檢索座標。

  • 你會如何解決這個問題?
  • 你會完全跳過TDictionary的事情,並採取另一種方法嗎?
+2

我認爲這是一個完全有效的問題,我希望downvoters解釋自己。 –

+1

它不工作是不夠的 –

+1

如果你看到我的鏈接問題,那麼你會明白爲什麼它不工作。 –

回答

7

構造函數TDictionary接受一個IEqualityComparer<TKey>參數,它將用於比較鍵值。實施TTime的接口(通過繼承TEqualityComparer)並使用SameTime執行比較。

+1

這是一個很好的答案。使用TEqualityComparer.Construct可能是最方便的。儘管編寫哈希函數可能有點棘手。爲此,您需要使其與SameTime的實現兼容。 –

+2

散列碼可以是任何你想要的,只要它對被散列值是唯一的。由於這將是TTime,我建議將它解碼爲小時,分鐘,秒和毫秒分量,然後將它們移位爲一個整數。它們將很好地匹配(小時需要5位,分和秒需要6位,而毫秒需要10位,總共需要27位),並且不會失去任何精度。 –

+2

DateTimeToTimeStamp將產生一個唯一的整數,它比TTime的精確表示具有優勢。 ;-) –