Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 使用TTime作为TDictionary的键_Delphi_Datetime_Dictionary_Delphi 2010 - Fatal编程技术网

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
值不表示完全相同的小时/分钟/秒/毫秒,则它们无法使用上述任一技术生成相同的散列。