重新索引TDictionary的最佳方法是什么?

时间:2019-09-27 15:06:05

标签: delphi tdictionary

我有一个TObjectDictionary<Integer, TMyObject>,而TMyObject有一个ID字段是关键。字典拥有这些值。这些键最初来自序列生成器,因此在进行删除和插入操作时,键值在字典中变为非顺序的,我需要它们是顺序的。我可以将所有对象拉到一个单独的TList中,为它们的ID重新编号,清除字典,然后用它们现在的顺序键重新添加这些对象,但这似乎太不雅致了。有一个更好的方法吗?

另外,如何告诉TObjectDictionary它不再拥有其值?

1 个答案:

答案 0 :(得分:0)

如果可以从值中检索密钥,则将其存储在TDictionary中可能不是最好的主意,因为当密钥属性更改时,您无法轻松地重新哈希所有项。再加上您只能使用ExtractPair来使字典所拥有的对象保持活动状态,这是非常无效的,或者会破坏您进入专用FOwnerships字段的方式。

由于键/ ID来自序列生成器,因此插入顺序可能恰好是递增顺序,这可能是将项目放入列表并按ID进行排序的指示符。然后可以通过二进制搜索完成查找。

除非您愿意并实施自己的搜索树以满足您的任何要求。