2009-03-24 38 views
14

मेरे पास एक ऐसी संपत्ति है जो HashTable लौटाती है। मैं अपनी संपत्ति को पुन: सक्रिय किए बिना इसे सॉर्ट करना चाहता हूं। कृपया ध्यान दें: मैं एक और प्रकार वापस नहीं करना चाहता हूं। कोड:क्या हैशटेबल को सॉर्ट करना संभव है?

/// <summary> 
    /// All content containers. 
    /// </summary> 
    public Hashtable Containers 
    { 
     get 
     { 
      Hashtable tbl = new Hashtable(); 
      foreach (Control ctrl in Form.Controls) 
      { 
       if (ctrl is PlaceHolder) 
       { 
        tbl.Add(ctrl.ID, ctrl); 
       } 
       // Also check for user controls with content placeholders. 
       else if (ctrl is UserControl) 
       { 
        foreach (Control ctrl2 in ctrl.Controls) 
        { 
         if (ctrl2 is PlaceHolder) 
         { 
          tbl.Add(ctrl2.ID, ctrl2); 
         } 
        } 
       } 
      } 

      return tbl; 
     } 
    } 
+0

+1 डाउनवोट की वजह से! यह किसी ऐसे व्यक्ति से एक बिल्कुल वैध प्रश्न है जो समझ में नहीं आता है कि हैशटेबल क्या है! डाउनवोट की वजह से –

+0

+1। प्रश्न दिखाता है कि पोस्टर को पता नहीं है कि हैशटेबल्स कैसे काम करते हैं, लेकिन यह एक बिल्कुल मान्य विषय है। – snemarch

+1

@agassan: मैंने आपकी पोस्ट को थोड़ा सा साफ़ कर दिया ताकि यह अधिक समेकित हो और LINQ प्रश्न हटा दिया गया क्योंकि ऐसा लगता है कि आप वास्तव में क्या पूछ रहे थे। यदि आपको यह पसंद नहीं है तो रोलबैक के लिए स्वतंत्र महसूस करें। डाउनवोट की वजह से –

उत्तर

8

एक और विकल्प हैश तालिका का निर्माण करना है जैसा कि आप पहले से कर रहे हैं, और उसके बाद बस चाबियों से एक क्रमबद्ध सेट बनाते हैं। आप उस क्रमबद्ध कुंजी सेट के माध्यम से पुनरावृत्ति कर सकते हैं, आवश्यकतानुसार हैश तालिका से संबंधित मान ला सकते हैं।

+0

का उपयोग करके मेरे अधिकांश ड्रॉप तत्वों में से यह बिल्कुल ठीक है कि मैं इसे कैसे काम करने में सक्षम था। – user81740

3

क्षमा करें, लेकिन आप प्रकार hashtable नहीं कर सकता। आपको कुछ क्रमबद्ध संग्रहों का उपयोग करने के लिए अपने कोड को दोबारा करना होगा। तरह एक HashTable नहीं कर सकते हैं आप:)

Wikipedia Hash Table

2

मैं काफी यकीन है कि हैश तालिकाओं पृथक नहीं किया जा सकता है ... हूँ। यदि आप कर सकते हैं, तो यह एक हैशटेबल नहीं होगा। आप हैशटेबल का आकलन कर सकते हैं, और उसके बाद गणना को सॉर्ट कर सकते हैं। लेकिन यह बहुत धीमा होगा। इसके बजाय SortedDictionary का उपयोग करना बेहतर होगा।

0

हैश तालिका को सॉर्ट करने में कोई बात नहीं है क्योंकि आपके पास पहले से ही निरंतर लुकअप समय है। या सबसे खराब ओ (बी) जहां बी बाल्टी आकार है।

18

हैशटेबल्स मूल्यों के लिए मैपिंग कुंजी द्वारा काम करते हैं। इस मैपिंग में लागू यह अवधारणा है कि चाबियाँ किसी भी विशेष क्रम में क्रमबद्ध या संग्रहित नहीं होती हैं।

हालांकि, आप SortedDictionary<K,V> पर एक नज़र डाल सकते हैं।

+0

धन्यवाद। बहुत अच्छा काम करता है। मैं रिएक्टर संपत्ति के लिए बहुत आसान था क्योंकि मुख्य जोड़े मूल्य – user81740

1

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

0

बेशक हैश टेबल को सॉर्ट किया जा सकता है, लेकिन आपको पहले हैश टेबल को सॉर्ट करने का अर्थ परिभाषित करने की आवश्यकता है। (इसमें समस्या है)

एक बार जब आप ऐसा कर लेंगे, तो, आपने हमेशा उन सभी फायदों को हटा दिया है जो हैशटेबल आपको दे सकता है, और आप एक क्रमबद्ध सरणी (बाइनरी खोज के साथ) या उपयोग का भी उपयोग कर सकते हैं इसके बजाय एक लाल-काले पेड़।

1

बिल्कुल एक सी # उत्तर नहीं है, लेकिन मुझे यकीन है कि आप इसमें से कुछ कर सकते हैं।

पर्ल में प्रदर्शन में आउटपुट में उपयोग के लिए हैश तालिका को "क्रमबद्ध" करना आम है।

उदाहरण के लिए:

print "Items: "; 
foreach (sort keys %items) { 
    print $_, '=', $items{$_}, ' '; 
} 

यहाँ चाल है कि पर्ल हैश सॉर्ट नहीं है, यह हैश चाबियों का एक प्रतिलिपि बनाई सूची को क्रमबद्ध किया जाता है। सूची में हैश कुंजियों को निकालने के लिए सी # में पर्याप्त होना चाहिए और फिर उस सूची को सॉर्ट करना चाहिए।

+0

मैंने ऐसा किया है, सॉर्टलिस्ट ऑब्जेक्ट बनाकर फिर हैशटेबल मानों पर लूप करें और सॉर्टलिस्ट में मूल्यों को रखा है और फिर sortList.Sort() – user81740

0

मैं एक नया प्रोग्रामर हूं इसलिए नमक के अनाज के साथ जो कुछ भी कहता हूं उसे ले लो। लेकिन जब मैंने इसी तरह की स्थिति में भाग लिया तो मैंने यही किया। मैंने एक वर्ग बनाया जिसमें दो चर थे और फिर उन चरों से List ऑब्जेक्ट बनाया और फिर मैंने उन चरों को सॉर्ट करने के लिए linq का उपयोग किया।

0

आप हैशटेबल को सॉर्ट करने के लिए डेटाव्यू का भी उपयोग कर सकते हैं।यहां एक लेख है जिसे मैंने 5 साल पहले लिखा था: http://www.codeproject.com/Articles/37039/Sorting-Hashtable

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