维护订单的键/值集合

时间:2011-10-31 15:37:56

标签: delphi generics collections

我需要一个delphi键/值集合,这将允许我按照插入/添加键/值对的相同顺序迭代集合。

TList<T>保证订单,但TDictionary<T1, T2>没有。

我想我总是可以定义TList<TPair<Key, Value>>,但使用它会更麻烦。

是否有符合我要求的内置集合类型,或者将TList<TPair<Key, Value>>作为最佳选择?或者最好是拥有TList<Key>TDictionary<Key, Value>并迭代列表。

3 个答案:

答案 0 :(得分:3)

如果您的密钥类型为string且您的值类型是TObject的某个后代,请使用TStringList。将您的值存储在Objects数组属性中。

SL.AddObject('foo', obj1);

SL.Add('bar');
i := SL.IndexOf('bar');
SL.Objects[i] := obj2;

如果需要,请设置OwnsObjects属性。

答案 1 :(得分:3)

DeHL collections library包含许多类似“有序字典”的类。有序的使用树(有顺序)而不是无序的哈希映射。

我相信TSortedDistinctMultiMap可能是您需要的,如果您想强制执行唯一性,并且如果您不想强制Key值唯一性,那么还有其他选择(没有{{} 1}}在类名中)将接近你所需要的。

2017年更新:不再维护DeHL库。

答案 2 :(得分:0)

Spring4D library提供了有序的词典。在撰写本文时,这些仅在develop分支上提供。