इसके बाद से यह एक द्विआधारी खोज वृक्ष कि पूर्ववर्तियों या उत्तराधिकारियों का खुलासा नहीं करता के रूप में कार्यान्वित किया जाता है एक SortedDictionary<TKey, TValue>
साथ कुशलता से इस लागू करने के लिए मुश्किल है।
आप निश्चित रूप से "ज्ञात" कुंजी प्राप्त होने तक प्रत्येक KeyValuePair को गिन सकते हैं। LINQ का एक छोटा सा के साथ, इस तरह (यह मानते हुए कुंजी निश्चित रूप से मौजूद है और पहली कुंजी नहीं है) दिखेगा:
SortedDictionary<int, int> dictionary = ...
int knownKey = ...
var previousKvp = dictionary.TakeWhile(kvp => kvp.Key != knownKey)
.Last();
उन मान्यताओं पकड़ नहीं है, तो आप कर सकता है:
var maybePreviousKvp = dictionary.TakeWhile(kvp => kvp.Key != knownKey)
.Cast<KeyValuePair<int, int>?>()
.LastOrDefault();
(चेक maybePreviousKvp != null
पता लगाने के लिए कि है कि पिछले KeyValuePair सफलतापूर्वक प्राप्त की गई थी।)
लेकिन इस सब पर कुशल होने के लिए नहीं जा रहा है।
तो संभव है, बजाय एक SortedList<TKey, TValue>
उपयोग करने पर विचार (जाहिर है, यह संभव हो सकता है अगर आप अपनी धीमी आवेषण नहीं लेते हैं और हटा देता है सकते हैं)। यह संग्रह द्वारा अनुक्रमणिका द्वारा कुशल कुंजी और मूल्य-पुनर्प्राप्ति का समर्थन करता है क्योंकि इसे एक बढ़ने योग्य सरणी के रूप में कार्यान्वित किया जाता है।
SortedList<int, int> dictionary = ...
int knownKey = ...
int indexOfPrevious = dictionary.IndexOfKey(knownKey) - 1;
// if "known" key exists and isn't the first key
if(indexOfPrevious >= 0)
{
// Wrap these in a KeyValuePair if necessary
int previousKey = dictionary.Keys[indexOfPrevious];
int previousValue = dictionary.Values[indexOfPrevious];
}
कुंजी-सूची पर एक द्विआधारी खोज चलाता है, O(log n)
समय में चल रहे: तो फिर आपकी क्वेरी के रूप में सरल हो जाता है। बाकी सब कुछ निरंतर समय में चलना चाहिए, जिसका अर्थ है कि पूरा ऑपरेशन लॉगरिदमिक समय में चलाना चाहिए।
अन्यथा, आपको स्वयं को लागू करना होगा/एक बीएसटी संग्रह ढूंढना होगा जो पूर्ववर्ती/उत्तराधिकारी का पर्दाफाश करता है।
SortedDictionary शब्दकोश = नए SortedDictionary (); –
PramodChoudhari
डर मैं पूछता हूं "क्यों?" –
मुझे लगता है कि [इस सवाल] के उत्तरों (http://stackoverflow.com/questions/931891/sorted-dictionary-in-c) बताते हैं कि आप जो चाहते हैं उसे कैसे करें। –