0

我有一个TObjectDictionary<Integer, TMyObject>, 并且TMyObject有一个ID字段是关键。字典拥有这些值。键最初来自序列生成器,因此当删除和插入发生时,键值在字典中变得不连续,我需要它们是连续的。我可以将所有对象拉到一个单独的 s 中TList,重新编号它们ID的 s,清除字典并使用它们现在顺序的键重新添加对象,但这似乎非常不雅。有一个更好的方法吗?

另外,我如何告诉 aTObjectDictionary它不再拥有它的值?

4

1 回答 1

0

如果可以从值中检索密钥,那么将其存储在 a 中可能不是最好的主意,TDictionary那么当它们的密钥属性更改时,您将无法轻松地重新散列所有项目。再加上您只能ExtractPair用来保持字典所拥有的对象处于活动状态,这是非常无效的,或者破解您进入私有FOwnerships字段的方式。

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

除非您很喜欢并实现自己的搜索树来满足您的任何要求。

于 2019-09-27T15:54:05.307 回答