我需要一个delphi键/值集合,这将允许我按照插入/添加键/值对的相同顺序迭代集合。
TList<T>
保证订单,但TDictionary<T1, T2>
没有。
我想我总是可以定义TList<TPair<Key, Value>>
,但使用它会更麻烦。
是否有符合我要求的内置集合类型,或者将TList<TPair<Key, Value>>
作为最佳选择?或者最好是拥有TList<Key>
和TDictionary<Key, Value>
并迭代列表。
答案 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分支上提供。