2011-10-31 90 views
7

我需要一個delphi鍵/值集合,它允許我按照鍵/值對插入/添加的順序迭代集合。維護訂單的鍵/值集合

TList<T>保證訂單,但TDictionary<T1, T2>沒有。

我想我總是可以定義一個TList<TPair<Key, Value>>,但處理起來會比較麻煩。

是否有內置的集合類型可以滿足我的要求,或者將包裝TList<TPair<Key, Value>>是我的最佳選擇?或者,也許最好有一個TList<Key>和一個TDictionary<Key, Value>並遍歷列表。

+0

沒有內置的有序字典。我希望有第三方的實施,但我個人不知道。 –

+0

一個'TList >'在鍵上排序並不算太壞,因爲鍵查找操作可以使用二分查找,但基於「樹」的數據結構可能是您需要的。注意'TList >'不會強制唯一性,如果你想執行唯一鍵,這也是你可能想要實現的。 –

回答

3

如果您的密鑰類型是string而您的值類型是TObject的某個後裔,請使用TStringList。將您的值存儲在Objects數組屬性中。

SL.AddObject('foo', obj1); 

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

如果需要,請設置OwnsObjects屬性。

3

DeHL collections library包含很多「有序字典」類。有序的使用樹(有順序)而不是無序的散列映射。

相信TSortedDistinctMultiMap可能是你所需要的,如果要強制唯一性,如果你不希望強制Key價值的獨特性,然後有其他的選擇(不Distinct在類名),這將是接近你所需要的。