2012-05-08 12 views
9

सी # नेट 3.5 में HashSet<string> कैसे क्रमबद्ध कर सकता है?एक हैशसेट सॉर्ट करें .Net 3.5

+4

आप नहीं कर सकते। 'हैशसेट' परिभाषा द्वारा क्रमबद्ध नहीं है। क्या आप इसकी एक क्रमबद्ध प्रतिलिपि बनाना चाहते हैं जो एक सरणी है? – svick

+2

इन-प्लेस या सॉर्ट की गई प्रतिलिपि सॉर्ट करें? –

उत्तर

8

आप OrderBy विधि का उपयोग कर सकते हैं, या तो एक आईसीओएमपेयर (यानी http://msdn.microsoft.com/en-us/library/bb549422.aspx) या कुछ लैम्बडास के साथ अपनी तुलनात्मक इनलाइन का उपयोग कर (मैं आमतौर पर नीचे की तुलना में मेरी तुलना के लिए भविष्यवाणी करता हूं)।

प्रति कड़ी के रूप में देखें:

 class Pet 
     { 
      public string Name { get; set; } 
      public int Age { get; set; } 
     } 

     public static void OrderByEx1() 
     { 
      Pet[] pets = { new Pet { Name="Barley", Age=8 }, 
          new Pet { Name="Boots", Age=4 }, 
          new Pet { Name="Whiskers", Age=1 } }; 

      IEnumerable<Pet> query = pets.OrderBy(pet => pet.Age); 

      foreach (Pet pet in query) 
      { 
       Console.WriteLine("{0} - {1}", pet.Name, pet.Age); 
      } 
     } 

     /* 
     This code produces the following output: 

     Whiskers - 1 
     Boots - 4 
     Barley - 8 
     */ 

और अधिक पढ़ें: http://msdn.microsoft.com/en-us/library/bb534966.aspx

+7

में उपलब्ध नहीं है यह स्पष्ट रूप से हैशसेट को सॉर्ट नहीं करता है, लेकिन हैशसेट का क्रमबद्ध दृश्य देता है। – CodesInChaos

+3

हां यह सच है, हैशसेट के भीतर निहित मान क्रमबद्ध नहीं हैं लेकिन एक क्रमबद्ध दृश्य (या प्रतिलिपि) में पहुंचा जा सकता है। – ericosg

21

आप नहीं करते हैं। परिभाषा के अनुसार, HashSet क्रमबद्ध नहीं है।

यदि आप सॉर्ट किए गए हैश सेट चाहते हैं, तो आपको SortedSet का उपयोग करना चाहिए। जिस तरीके से यह खुलासा करता है वह अनिवार्य रूप से HashSet द्वारा प्रदत्त उन लोगों का एक सुपरसेट है, जिसमें इसकी सामग्री को सॉर्ट करने की क्षमता शामिल है।

+2

ध्यान दें कि सॉर्टेडसेट में आपके पास हैशसेट का उपयोग करते समय अलग-अलग मान नहीं होंगे, लेकिन उचित एक्सटेंशन विधि के साथ इसे बनाते समय आप विशिष्ट मान लोड कर सकते हैं। – ericosg

+1

@ericosg मैं आपकी टिप्पणी को समझ नहीं पा रहा हूं। – CodesInChaos

+1

मेरा मतलब था, अगर आपको सॉर्टेडसेट में विशिष्ट मानों की आवश्यकता है तो आपको अलग-अलग दृश्य प्राप्त करने के लिए डिस्टिंट() को कॉल करने की आवश्यकता है। यदि आपको सॉर्ट किए गए हैशसेट की आवश्यकता है तो आपको सॉर्ट किए गए दृश्य प्राप्त करने के लिए ऑर्डर करने की आवश्यकता है। – ericosg

8

HashSet < स्ट्रिंग > डिजाइन के अनुसार क्रमबद्ध नहीं है। आप आइटम सॉर्ट करने के लिए चाहते हैं एक बार (~ नहीं अक्सर) तो आप OrderBy LINQ विधि (क्योंकि HashSet < स्ट्रिंग > लागू करता IEnumerable < स्ट्रिंग >) का उपयोग कर सकते हैं: hs.OrderBy (रों => रों);

आप क्रमबद्ध HashSet की जरूरत है तो आप SortedDictionary वर्ग का उपयोग कर सकते है - बस TValue सामान्य पैरामीटर के लिए कुछ डमी प्रकार (अर्थात bool) का उपयोग करें।

SortedSet कक्षा .NET 3.5 में उपलब्ध नहीं है।