2009-09-16 21 views
5

जावा से .NET में जाने वाले मेरे सबसे बड़े मुद्दों में से एक यह तथ्य है कि .NET में एक सेट इंटरफ़ेस नहीं है। मुझे पता है कि पुस्तकालय हैं जो मैं जा सकता हूं और डाउनलोड कर सकता हूं लेकिन इसका निर्माण करने का कारण क्या है? मानचित्र (शब्दकोश) और सूचियां हैं लेकिन सेट क्यों नहीं?क्यों नहीं है .NET सेट डेटा संरचना है?

संपादित: मैं स्पष्ट करना चाहिए कि हर कोई अभी तक नेट 3.5 का उपयोग करता है - तो मैं और अधिक या कम नेट

के पुराने संस्करणों की चर्चा करते हुए कर रहा हूँ

उत्तर

8

मुझे लगता है कि यह बस बीसीएल लेखकों द्वारा एक चूक है। .NET 3.5 में HashSet वर्ग है; पिछले संस्करणों के लिए, मैं ओ (1) जोड़ने, हटाने और लुकअप समय को दोहराने के लिए, मान फ़ील्ड में नल के साथ, < टी, ऑब्जेक्ट > ऑब्जेक्ट को लपेटने की अनुशंसा करता हूं।

+1

यह वही है कि जावा के सेट कार्यान्वयन कैसे काम करते हैं। –

3

इन दिनों HashSet<T> है, लेकिन दुख की बात है कि मुझे कोई इंटरफ़ेस नहीं है।

2

शायद तर्क यह है कि एक सेट वास्तव में एक विशेष कार्यान्वयन विस्तार के साथ एक सूची है जो वस्तुओं को अलग होने के लिए प्रतिबंधित करता है। चूंकि सूची की विशिष्टता इंटरफ़ेस की बजाय कार्यान्वयन में है, इसलिए एक इंटरफ़ेस की आवश्यकता नहीं है।

जैसा कि अन्य ने उल्लेख किया है, एफसीएल में HashSet<T> है।

+1

आप सूचियों और सेट के बीच एक बड़ा अंतर भूल जाते हैं: एक सेट का आदेश दिया जाता है जबकि एक सेट नहीं है। –

+1

मैंने देखा है कि .NET कार्यान्वयनकर्ता कभी-कभी एक अत्यधिक लेते हैं .. मंच के लिए अकादमिक दृष्टिकोण। बुनियादी उपकरण बनाएँ। बाकी सब कुछ एक कार्यान्वयन विस्तार है। –

+0

तत्वों को अलग करने के लिए प्रतिबंधित करना कार्यान्वयन विस्तार से FAR है। यह डेटा प्रकार के लिए इंटरफ़ेस का बहुत अधिक हिस्सा है। – erikkallen

4

.NET 3.5 में HashSet है जो सभी सेट ऑपरेशंस करता है।

+0

जो मैं विशेष रूप से जानना चाहता हूं वह यह है कि इसे जल्द ही लागू नहीं किया गया था –

+0

केवल बीसीएल टीम इसका उत्तर दे सकती है। यह मेरे लिए एक महत्वपूर्ण चूक की तरह प्रतीत होता है। – thecoop

1

शायद शैक्षिक विचारों के कारण।

एक सामान्य प्रोग्रामर एक जादुई कंटेनर के रूप में सेट देखता है जो कि इससे कोई फर्क नहीं पड़ता कि इसमें कितने तत्व हैं।

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

बस एक जंगली अनुमान।

3

जैसा कि अन्य ने उल्लेख किया है, HashSet<T> है, जो वास्तव में केवल एक सेट है।

इसके सामने "हैश" है (सेट के कार्यान्वयन विवरण से यह डुप्लिकेट को खत्म करने के लिए हैश का उपयोग करता है) क्योंकि Set वीबी.नेट में एक कीवर्ड है।

+0

दिलचस्प टिडबिट –

5

.NET 4.0 HashSet में नए ISet इंटरफ़ेस को लागू करने के लिए फिर से लगाया जाएगा।

2

मैं जावा से हाल ही में (पेशेवर रोजगार के कारण) में स्थानांतरित हो गया और मुझे यह स्वीकार करना होगा कि मेरी प्रारंभिक समस्याएं भी संग्रह पर हैं।
वर्तमान में नेट संस्करण (3।5 और के बारे में सी # बोल) आप

  • ICollection
  • IList<T>
  • List<T>
  • IDictionary<TKey,TValue>
  • IEnumerable<T>

पर अपने आप को बोध चाहिए ये सबसे अधिक इस्तेमाल किया जाता है (आशा है कि मैं नहीं था एक याद मत करो)

+0

मैं बिंदुओं पर आईनेमरेबल का भी उपयोग करता हूं, जब मैं बिना किसी जानकारी के सामान्यीकृत समेकित करना चाहता हूं और पिछले .NET 2 जेनेरिक गैर-कॉन्वर्सिस प्राप्त करना चाहता हूं – thecoop

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