2011-10-31 10 views
7

बनाए रखता है मुझे एक डेल्फी कुंजी/मूल्य संग्रह की आवश्यकता है जो मुझे उसी क्रम में संग्रह पर पुन: सक्रिय करने की अनुमति देगा, जिसमें कुंजी/मान जोड़े डाले गए/जोड़े गए थे।कुंजी/वैल्यू संग्रह जो आदेश

TList<T> आदेश की गारंटी देता है लेकिन TDictionary<T1, T2> नहीं करता है।

मुझे लगता है कि मैं हमेशा TList<TPair<Key, Value>> परिभाषित कर सकता हूं लेकिन यह काम करने के लिए और अधिक बोझिल होगा।

क्या कोई अंतर्निहित संग्रह प्रकार है जो मेरी आवश्यकताओं को पूरा करेगा या TList<TPair<Key, Value>> लपेटने वाला मेरा सबसे अच्छा विकल्प होगा? या शायद TList<Key> और TDictionary<Key, Value> और सूची के माध्यम से फिर से बेहतर होना बेहतर होगा।

+0

कोई अंतर्निहित आदेशित शब्दकोश नहीं है। मुझे उम्मीद है कि तीसरे पक्ष के कार्यान्वयन चारों ओर हैं, लेकिन मैं व्यक्तिगत रूप से एक के बारे में नहीं जानता। –

+0

ए 'टीएलिस्ट <टीपीएयर > 'कुंजी पर सॉर्ट किया गया बहुत बुरा नहीं है, क्योंकि एक कुंजी खोज ऑपरेशन बाइनरी खोज का उपयोग कर सकता है, लेकिन एक' पेड़ 'आधारित डेटा संरचना शायद आपको चाहिए। ध्यान दें कि '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 के बिना) अन्य विकल्प हैं कि हो जाएगा आपको जो चाहिए उसे बंद करें।

संबंधित मुद्दे