c# - सी#सेट संग्रह?




.net collections (6)

CodePlex पर PowerCollections पर एक नज़र डालें। सेट और ऑर्डर्डसेट के अलावा इसमें कुछ अन्य उपयोगी संग्रह प्रकार हैं जैसे डेक, मल्टी डिक्शनरी, बैग, ऑर्डर्डबैग, ऑर्डर्ड डिक्शनरी और ऑर्डर्ड मल्टी डिक्शनरी।

अधिक संग्रह के लिए, सी 5 जेनेरिक संग्रह पुस्तकालय भी है

क्या किसी को पता है कि सी # में जावा के Set संग्रह के बराबर बराबर है या नहीं? मुझे पता है कि आप कुछ हद तक एक Dictionary या एक HashTable का उपयोग करके सेट को नकल कर सकते हैं, लेकिन मूल्यों को अनदेखा कर सकते हैं, लेकिन यह एक बहुत ही सुरुचिपूर्ण तरीका नहीं है।


आप अपने स्वयं के व्यावहारिक सेट कार्यान्वयन को कुछ घंटों में कार्यान्वित कर सकते हैं। मैंने इसे तब किया जब मुझे यह करना पड़ा (क्षमा करें, मेरे पास कोड आसान नहीं है): http://java.sun.com/j2se/1.4.2/docs/api/java/util/Set.html


मैं Iesi.Collections http://www.codeproject.com/KB/recipes/sets.aspx उपयोग करता हूं

इसका उपयोग बहुत से ओएसएस परियोजनाओं में किया जाता है, मैं पहली बार एनएचबेर्नेट में आया था


मैं एक Dictionary<T, object> चारों ओर एक रैपर का उपयोग करता हूं, मूल्यों में नल संग्रहीत करता हूं। यह ओ (1) जोड़ता है, लुकअप और चाबियों को हटा देता है, और सभी उद्देश्यों और उद्देश्यों के लिए एक सेट की तरह कार्य करता है।


HashSet प्रयास करें:

हैशसेट (टी) वर्ग उच्च प्रदर्शन सेट ऑपरेशन प्रदान करता है। एक सेट एक संग्रह है जिसमें कोई डुप्लिकेट तत्व नहीं होते हैं, और जिनके तत्व किसी विशेष क्रम में नहीं होते हैं ...

हैशसेट (टी) ऑब्जेक्ट की क्षमता ऑब्जेक्ट्स के तत्वों की संख्या है। एक हैशसेट (टी का) ऑब्जेक्ट की क्षमता स्वचालित रूप से बढ़ जाती है क्योंकि ऑब्जेक्ट में तत्व जोड़े जाते हैं।

हैशसेट (टी का) वर्ग गणितीय सेट के मॉडल पर आधारित है और Dictionary(Of TKey, TValue) के कुंजी Dictionary(Of TKey, TValue) या Hashtable संग्रहों की कुंजी तक पहुंचने के समान उच्च प्रदर्शन सेट ऑपरेशन प्रदान करता है। सरल शब्दों में, हैशसेट (टी) कक्षा को मूल्यों के बिना एक Dictionary(Of TKey, TValue) संग्रह के रूप में सोचा जा सकता है।

एक हैशसेट (टी का) संग्रह सॉर्ट नहीं किया गया है और इसमें डुप्लिकेट तत्व नहीं हो सकते हैं ...


HashSet<T> डेटा संरचना:

फ्रेमवर्क क्लास लाइब्रेरी HashSet<T> डेटा संरचना .NET Framework 3.5 में पेश की गई थी। HashSet पर इसके सदस्यों की एक पूरी सूची मिल सकती है।

HashSet<T> गणितीय सेट के बाद कम या ज्यादा मॉडलिंग किया गया है, जिसका अर्थ है कि:

  1. इसमें कोई डुप्लिकेट मान नहीं हो सकता है।

  2. इसके तत्व किसी विशेष क्रम में नहीं हैं; इसलिए प्रकार IList<T> इंटरफेस को लागू नहीं करता है, लेकिन अधिक बुनियादी ICollection<T> । नतीजतन, हैश सेट के अंदर तत्वों को इंडेक्स के माध्यम से यादृच्छिक रूप से एक्सेस नहीं किया जा सकता है; वे केवल एक गणक के माध्यम से पुनरावृत्त किया जा सकता है।

  3. Union , Intersection , IsSubsetOf , IsSupersetOf जैसे कुछ सेट फ़ंक्शंस उपलब्ध हैं। कई सेट के साथ काम करते समय ये आसानी से आ सकते हैं।

HashSet<T> और List<T> बीच एक और अंतर यह है कि हैश सेट की Add(item) विधि को कॉल करना एक बूलियन मान देता है: यदि आइटम जोड़ा गया था, और false है (क्योंकि यह पहले से सेट में पाया गया था)।

List<T> क्यों नहीं?

चूंकि HashSet<T> केवल अद्वितीय वस्तुओं का संग्रह है, इसलिए आपको आश्चर्य हो सकता है कि इसे डेटा संरचना क्यों होनी चाहिए। एक सामान्य List<T> यह जांच कर एक ही व्यवहार हो सकती है कि यह जोड़ने से पहले सूची में कोई वस्तु पाई जाती है या नहीं।

संक्षिप्त जवाब गति है। सामान्य List<T> माध्यम से खोजना बहुत तेज़ हो जाता है क्योंकि अधिक तत्व जोड़े जाते हैं। एक HashSet<T> को एक संरचना डिज़ाइन की आवश्यकता होती है जो तेजी से खोज और सम्मिलन गति की अनुमति देगी।

मानक:

आइए HashSet<T> बनाम List<T> की प्रदर्शन गति की तुलना करें।

प्रत्येक परीक्षण में प्रत्येक संग्रह में 0 से 9, 999 से पूर्णांक जोड़ने का समावेश होता था। हालांकि, प्रत्येक पूर्णांक पर मॉड 25 लागू किया गया था। मॉड 25 अधिकतम प्रकार के आइटम 25 बनाता है। चूंकि 10,000 तत्व जोड़े गए थे, इसलिए 400 टकराव होने के लिए मजबूर होना पड़ा, जिससे डेटा संरचनाओं को उनके खोज एल्गोरिदम का उपयोग करने का मौका मिला। टाइम्स को 10,000 परीक्षणों के बाद 3 बार मापा गया था और औसत से बाहर किया गया था।

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

           Average time [ms]
----------------------------
HashSet<T>             2,290
List<T>                5,505

अब चलिए आदिम प्रकारों के बजाय तत्व वस्तुएं बनाते हैं। मैंने तीन क्षेत्रों के साथ एक त्वरित Person वर्ग लिखा: Name , LastName , और ID । चूंकि मैंने वस्तुओं की तुलना करने के लिए कोई विशिष्ट तरीका शामिल नहीं किया है, इसलिए सभी तत्व टकराव के बिना जोड़े जाएंगे। इस बार एक संग्रह के लिए प्रत्येक संग्रह में 1,000 Person वस्तुओं को जोड़ा गया था। 1,000 परीक्षणों के 3 सेटों के कुल समय औसत थे।

           Average time [ms]
----------------------------
HashSet<Person>          201
List<Person>           3,000

जैसा कि आप देख सकते हैं, HashSet<T> फायदेमंद बनाने, ऑब्जेक्ट्स का उपयोग करते समय चलने वाले समय में अंतर खगोलीय हो जाता है।





set