2012-11-02 26 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的精确表示具有优势。 ;-) –