Delphi 使用TTime作为TDictionary的键
我想使用Delphi 使用TTime作为TDictionary的键,delphi,datetime,dictionary,delphi-2010,Delphi,Datetime,Dictionary,Delphi 2010,我想使用TTime作为t字典的键,但我遇到了TTime比较的问题,因此我正在寻找替代方法 我特别的问题是,我试图建立某种议程,将时间放在一边,用TTime对象表示,并将它们存储在t字典中,与它们的最高坐标一起。给定我要在网格上绘制的任务的小时数,我可以根据任务的小时数从字典中轻松检索其顶部坐标。不幸的是,它不起作用,因为。我无法使用TTime从字典中可靠地检索坐标 你将如何解决这个问题 你会完全跳过词典的内容,用另一种方法吗 t字典构造函数接受一个IEqualityComparer参数,用于比
TTime
作为t字典
的键,但我遇到了TTime比较的问题,因此我正在寻找替代方法
我特别的问题是,我试图建立某种议程,将时间放在一边,用TTime
对象表示,并将它们存储在t字典中,与它们的最高坐标一起。给定我要在网格上绘制的任务的小时数,我可以根据任务的小时数从字典中轻松检索其顶部坐标。不幸的是,它不起作用,因为。我无法使用TTime
从字典中可靠地检索坐标
- 你将如何解决这个问题
- 你会完全跳过词典的内容,用另一种方法吗
t字典
构造函数接受一个IEqualityComparer
参数,用于比较键值。为TTime
(通过继承)实现该接口,并用于执行比较。我认为这是一个完全正确的问题,我想让投票人自己解释一下。如果你看到我的链接问题,它不起作用,这是不足够的,那么你就会明白为什么它不起作用了。@DavidHeffernan我编辑了我的问题,请重新考虑你的否决票,或者简单地问我你需要什么细节。用TTimeStamp作为键怎么样?这是个好答案。使用TEqualityComparer.Construct可能是最方便的。不过,编写哈希函数可能有点棘手。要做到这一点,您需要使其与SameTime的实现兼容。由于这将是一个TTime
,我建议将其解码为小时、分钟、秒和毫秒分量,然后将它们位移为单个整数。它们将很好地匹配(小时需要5位,分钟和秒需要6位,毫秒需要10位,总共27位),并且不会丢失任何精度。DateTimeToTimeStamp将生成一个唯一的整数,与has相比,它具有准确表示TTime的优势。;-)@雷米:那不准确。两个不相等的值可以具有相同的散列。@DavidHeffernan:如果两个TTime
值不表示完全相同的小时/分钟/秒/毫秒,则它们无法使用上述任一技术生成相同的散列。