2010-04-11 13 views
5

मुझे एक डेटा संरचना की आवश्यकता है जो SortedDictionary<int, double> जैसा कार्य करता है लेकिन कुंजी के बजाए मानों के आधार पर क्रमबद्ध किया जाता है। जब हमारे पास शब्दकोश में लगभग 3000 आइटम होते हैं तो मुझे आइटम जोड़ने और निकालने के लिए लगभग 1-2 माइक्रोसॉन्ड लेने की आवश्यकता होती है।.NET SortedDictionary लेकिन मानों द्वारा क्रमबद्ध

मेरा पहला विचार बस मेरे कोड में चाबियाँ और मानों को स्विच करना था। यह लगभग काम करता है। मैं इसे करके अपने परीक्षण में लगभग 1.2 माइक्रोसॉन्ड में तत्व जोड़ और निकाल सकता हूं।

लेकिन कुंजी को सॉर्टेड डिक्शनरी में अद्वितीय होना चाहिए, इसका मतलब है कि मेरे व्यस्त शब्दकोश में मूल्य अद्वितीय होना चाहिए। और ऐसे कुछ मामले हैं जहां वे नहीं हो सकते हैं।

.NET पुस्तकालयों में से कुछ का कोई विचार पहले से ही मेरे लिए काम करेगा?

+0

मैं SortedList संभालने कर रहा हूँ <> कि प्रदर्शन को पूरा नहीं करता? –

+0

क्या आप समझा सकते हैं कि आपके डोमेन में कुंजी और मान क्या दर्शाते हैं? –

+0

@ सिमॉन मुझे लगता है कि सॉर्टेडलिस्ट <> को चाबियों द्वारा भी क्रमबद्ध किया जाता है। http://msdn.microsoft.com/en-us/library/system.collections.sortedlist.aspx –

उत्तर

1

PowerCollections लाइब्रेरी में OrderedMultiDictionary<TKey, TValue> नामक एक कक्षा है जो मूल रूप से SortedDictionary<TKey, TValue> की तरह है लेकिन डुप्लिकेट की अनुमति देती है। जब आप कोई कुंजी खोजते हैं, तो आपको एक मान के बजाय एक गणना मिलती है।

लाइब्रेरी मुफ़्त है और आप उस वर्ग के साथ जो भी चाहते हैं उसे ठीक करने में सक्षम होना चाहिए - मानों को चाबियाँ के रूप में स्टोर करें।

+0

वाह, यह बहुत अच्छा है! मुझे डाउनलोड करने और देखने दो कि क्या यह 1-2 हमें वास्तविक त्वरित बनाता है। –

+0

नोट: यदि आप उस लाइब्रेरी का उपयोग नहीं करना चाहते हैं, तो आप इसे हमेशा 'सॉर्टेड डिक्शनरी' के साथ कार्यान्वित कर सकते हैं, और केवल एक 'टी 0' के बजाय मान के रूप में 'सूची ' स्टोर करें। – Aaronaught

+0

PowerCollections लाइब्रेरी के लिए लगभग 30 माइक्रोसॉन्ड जोड़ें या निकालें। बहुत करीब है, लेकिन मुझे यकीन नहीं है कि यह ऐप के लिए पर्याप्त है या नहीं। यद्यपि सूचक के लिए धन्यवाद। सॉर्टेड डिक्शनरी <डबल, सूची > यह भी एक अच्छा विचार है, मुझे देखने दो कि क्या मैं समय कर सकता हूं। एक और विचार था कि मुझे केवल सॉर्टेड डिक्शनरी का उपयोग करना था .0000001 या तो ऑर्डर की एक छोटी यादृच्छिक शब्द जोड़ें ताकि मेरे मूल्यों को अद्वितीय बनाया जा सके लेकिन नतीजे प्रभावित न हों। –

3

आप इस तरह मान द्वारा SortedDictionary सॉर्ट कर सकते हैं:

yourList.Sort(
    delegate(KeyValuePair<int, double> val1, 
    KeyValuePair<int, double> val2) 
    { 
     return val1.Value.CompareTo(val2.Value); 
    } 
); 
+0

अभिनव। मुझें यह पसंद है। – Armstrongest

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