Коллекция ключей / значений, поддерживающая порядок - PullRequest
8 голосов
/ 31 октября 2011

Мне нужна коллекция ключей / значений delphi, которая позволит мне перебирать коллекцию в том же порядке, в котором пары ключ / значение были вставлены / добавлены.

TList<T> гарантирует порядок, но TDictionary<T1, T2> делаетнет.

Полагаю, я всегда мог бы определить TList<TPair<Key, Value>>, но работать с ним было бы более обременительно.

Существует ли встроенный тип коллекции, который бы соответствовал моим требованиям, или было бы лучше всего выбрать TList<TPair<Key, Value>>?Или, возможно, было бы лучше иметь TList<Key> и TDictionary<Key, Value> и повторять список.

Ответы [ 3 ]

3 голосов
/ 31 октября 2011

библиотека коллекций DeHL содержит множество классов, подобных "Упорядоченному словарю".Упорядоченные используют деревья (которые имеют порядок) вместо неупорядоченных хеш-карт.

Я считаю, что TSortedDistinctMultiMap может быть тем, что вам нужно, если вы хотите обеспечить уникальность, и если вы не хотитечтобы обеспечить Key уникальность значения, есть другие варианты (без Distinct в имени класса), которые будут близки к тому, что вам нужно.

Обновление 2017: библиотека DeHL больше не поддерживается.

3 голосов
/ 31 октября 2011

Если ваш тип ключа string, а типом значения является какой-то потомок TObject, используйте TStringList.Сохраните ваши значения в свойстве Objects.

SL.AddObject('foo', obj1);

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

Установите свойство OwnsObjects, если вам нужно.

0 голосов
/ 05 июня 2018

Библиотека Spring4D предоставляет упорядоченные словари. На момент написания они доступны только в ветке velop .

...