我有一个TObjectDictionary<Integer, TMyObject>
,而TMyObject
有一个ID
字段是关键。字典拥有这些值。这些键最初来自序列生成器,因此在进行删除和插入操作时,键值在字典中变为非顺序的,我需要它们是顺序的。我可以将所有对象拉到一个单独的TList
中,为它们的ID
重新编号,清除字典,然后用它们现在的顺序键重新添加这些对象,但这似乎太不雅致了。有一个更好的方法吗?
另外,如何告诉TObjectDictionary
它不再拥有其值?
答案 0 :(得分:0)
如果可以从值中检索密钥,则将其存储在TDictionary
中可能不是最好的主意,因为当密钥属性更改时,您无法轻松地重新哈希所有项。再加上您只能使用ExtractPair
来使字典所拥有的对象保持活动状态,这是非常无效的,或者会破坏您进入专用FOwnerships
字段的方式。
由于键/ ID来自序列生成器,因此插入顺序可能恰好是递增顺序,这可能是将项目放入列表并按ID进行排序的指示符。然后可以通过二进制搜索完成查找。
除非您愿意并实施自己的搜索树以满足您的任何要求。