【发布时间】:2023-03-10 11:10:01
【问题描述】:
我正在使用 TClientDataSet 来管理对象并授予我对对象数据的“数据库”访问权限。到目前为止,这运作良好。我在数据集中有两个“特殊”(隐藏)字段-“ObjectName”和“ObjectRef”。 ObjectName 是对象项的类别和名称的连词,形式为 My category.my object',用于将我从对象实例内部获取到记录号。该字段已编入索引。 'ObjectRef' 是指向该对象实例的指针的整数类型转换,用于所有其他对象生命周期管理。
我必须为“ObjectName”字段选择一个大小,以适应我预期的最大可能类别和名称组合,但这只是一个索引,我希望这个大小尽可能小以提高性能和记忆的原因。是否有一个“无损”函数可以应用于我的表单“我的类别.我的名字”,它仍然是唯一的,我可以用作哈希?哈希函数看起来很聪明,但不是计算机科学专家,我永远不知道如何知道它们的输出是否唯一。
谢谢
【问题讨论】:
-
您在问是否可以在有限数量的插槽中存储无限数量的对象。答案是否定的。
-
@大卫。我不认为我是。我准备分配所需的任何长度的字段 - 我接受这将是一个限制 - 但我只是希望将我对“我的类别.我的名字”的平淡引用“压缩”成一个独特且更紧凑的引用 - 并且因此可能更有效 - 可索引的字符串。
-
您还需要限制 My category.my 名称值的长度。然后您可以按原样使用它们。
-
你真的需要“哈希”是可逆的,还是你只是担心碰撞?
-
@Brian:听起来您需要自动递增的标识值,而不是散列,并在数据库设计中使用 id(整数)而不是主键作为字符串。当然,这些在客户端数据集中不存在,但也许您应该考虑为这些临时表使用真正的 DB 层(可能是 SQLite)。
标签: string delphi hash delphi-xe2