我有一本德尔福词典,TDictionary<key,value>
里面有几万对。值是带有字符串的记录。我需要根据某种条件一次性删除大约 10..90% 的对(通过按键,如果这很重要)。过滤器/条件预先未知。问题是如何有效地做到这一点(不浪费额外的时间和内存)?
例如,这是不正确的(在Delphi 11中),会留下额外的元素:
for var i in Dict.Keys do
if i ... then
Dict.Remove(i);
如果是TList<>
,那么一切都很简单 - 我们从尾部迭代到头部Delete(I)
(或者更好的是,使用第二个计数器,替换不必要的元素并在末尾切断)。