टॉब्सन के पहले के जवाब पर विस्तार करने के लिए, सी 5 जेनेरिक कलेक्शन लाइब्रेरी में बड़ी संख्या में, अच्छी तरह से संग्रह हैं। मैं यहाँ उनमें से कुछ का वर्णन करेंगे:
कतार/ढेर
CircularQueue<T>
: इस वर्ग को कड़ाई से कतार और ढेर सुविधा प्रदान करता है। साथ ही, कुशल ओ (1) स्टैक/कतार में किसी भी आइटम तक पहुंच इंडेक्सर का उपयोग कर उपलब्ध है: cq[0]
(जहां 0 सबसे पुराना आइटम है, जिसे हटाया जा सकता है, आखिरकार पॉप किया जा सकता है)। System.Collections.Generic (SCG)
, List<T>
में अपने समकक्ष के सामान, इसका एक सरणी के द्वारा समर्थित है, की गारंटी देता है:
सूचियाँ
नोट: के रूप में पंक्ति/ढेर
ArrayList<T>
ArrayList
और LinkedList
भी कार्य कर सकते हैं ओ (1) अनुक्रमण, लेकिन सबसे खराब मामले ओ (एन) सम्मिलन। एक आइटम खोजने के लिए ओ (एन)।
LinkedList<T>
: इसके समकक्ष SCG.LinkedList<T>
के समान। एक दोगुना से जुड़े सूची का उपयोग करना, की गारंटी देता है हे (1) प्रविष्टि है, लेकिन बुरी से बुरी हालत हे (n) अनुक्रमण (व्यवहार में, या तो सिर या सूची की पूंछ से दूरी के लिए आनुपातिक है)। एक आइटम खोजने के लिए ओ (एन)। सॉर्टिंग एक स्थिर मर्ज सॉर्ट का उपयोग करता है।
HashedArrayList<T>
: उपरोक्त ArrayList<T>
के समान, लेकिन डुप्लिकेट की अनुमति नहीं देता है। बदले में आपको जो लाभ मिलता है वह यह है कि किसी आइटम को ढूंढने का समय और इसकी अनुक्रमणिका ओ (1) तक कम हो जाती है।
HashedLinkedList<T>
: उपरोक्त LinkedList<T>
के समान, लेकिन डुप्लिकेट की अनुमति नहीं देता है।पहले की तरह, किसी आइटम को खोजने का समय ओ (1) तक घटा दिया गया है, लेकिन इसकी अनुक्रमणिका को खोजने का समय ओ (n) है।
WrappedArray<T>
: काफी ArrayList<T>
के समान है, इस एक सरणी कि C5.IList<T>
लागू करता है के चारों ओर एक आवरण के रूप में कार्य है, लेकिन अपवाद फेंकता है तो एक प्रयास संग्रह (IsFixedSize
सच है और Add
, Remove
, Insert
काम नहीं करते संशोधित करने के लिए किया जाता है; Sort
, Shuffle
, और Reverse
, हालांकि, वे इन-प्लेस ऑपरेशंस के रूप में करते हैं)।
सूचियां "व्यू" कार्यक्षमता भी प्रदान करती हैं जो अंतर्निहित सूची के एक सेगमेंट का प्रतिनिधित्व करती है, जिससे स्थानीय परिचालनों को निष्पादित किया जा सकता है। सी 5 पुस्तक में दिए गए पैटर्न का उपयोग करके, संचालन उन दृश्यों का उपयोग करके किया जा सकता है जो दोनों सरणी और लिंक्ड सूचियों पर कुशल हैं। किसी भी सूची ऑपरेशन को एक दृश्य पर भी किया जा सकता है, जो अंतर्निहित सूची के उप-समूह में अपना प्रभाव प्रतिबंधित कर सकता है।
छाँटे संग्रह
SortedArray<T>
: को छोड़कर वह अपने आइटम हल कर रखता है और डुप्लिकेट की अनुमति नहीं है कि एक ArrayList<T>
की ही तरह। ध्यान दें कि इस संग्रह पर यादृच्छिक प्रविष्टियां और हटाना धीमा है। यह संग्रह सबसे अच्छा है यदि वस्तुओं की संख्या कम या शायद ही कभी संशोधित होती है लेकिन अक्सर आइटम इंडेक्स या मूल्य द्वारा उपयोग की जाती है।
TreeSet<T>
: वस्तुओं को क्रमबद्ध रखने के लिए एक लाल-काले पेड़ संरचना का उपयोग करता है। एक सेट के रूप में, यह डुप्लिकेट की अनुमति नहीं देता है। इंडेक्स या आइटम वैल्यू और सम्मिलन/हटाना ओ (लॉग एन) द्वारा एक्सेस करें।
TreeBag<T>
: वस्तुओं को क्रमबद्ध रखने के लिए एक लाल-काले पेड़ का उपयोग करता है। एक बैग के रूप में, यह डुप्लिकेट की अनुमति देता है, लेकिन पेड़ में डुप्लिकेट स्टोर नहीं करता है, बल्कि गिनती करके डुप्लीकेट रखता है।
दोनों TreeSet<T>
और TreeBag<T>
में क्षमता कुशलतापूर्वक "स्नैपशॉट" बनाने के लिए या पेड़ की लगातार प्रतियां प्रदान हे (1), जबकि अंतर्निहित पेड़ को संशोधित स्नैपशॉट से अधिक यात्रा की इजाजत दी। ध्यान दें कि पेड़ पर प्रत्येक स्नैपशॉट पेड़ के अपडेट के लिए प्रदर्शन जुर्माना जोड़ता है, लेकिन स्नैपशॉट का निपटारा होने पर ये प्रभाव दूर हो जाते हैं।
हैश संग्रह
HashSet<T>
: भंडारण के लिए एक सरल हैश तालिका का उपयोग कर एक संग्रह। आइटम मान द्वारा एक्सेस ओ (1) लेता है। एक सेट के रूप में, यह डुप्लिकेट की अनुमति नहीं देता है। एक फ़ंक्शन BucketCostDistribution()
प्रदान करता है जो आपको 'हैशकोड फ़ंक्शन' की कार्यक्षमता निर्धारित करने में मदद कर सकता है।
HashBag<T>
: HashSet<T>
के समान, लेकिन बैग अर्थशास्त्र है, जिसका अर्थ है कि डुप्लिकेट की अनुमति है, लेकिन डुप्लीकेट केवल गिनती करके संग्रहीत होते हैं।
प्राथमिकता कतार
IntervalHeap<T>
: एक प्राथमिकता कतार प्रदान करता है।अधिकतम और न्यूनतम ओ (1) संचालन, अधिकतम, न्यूनतम, जोड़ना और अपडेट करना ओ (लॉग एन) संचालन हैं। डुप्लिकेट को स्पष्ट रूप से संग्रहीत करके अनुमति देता है (गिनती से नहीं)।
शब्दकोश
HashDictionary<H,K>
: SCG.Dictionary<H,K>
के समान, प्रविष्टि का उपयोग, प्रविष्टि, और हे में विलोपन प्रदान करता है (1)। BucketCostDistribution()
फ़ंक्शन को HashSet<T>
ऊपर भी प्रदान करता है। किसी विशेष गणना आदेश की गारंटी नहीं देता है।
TreeDictionary<H,K>
: SCG.SortedDictionary<H,K>
के समान, एक लाल-काले पेड़ का उपयोग करके लगातार क्रमबद्ध शब्दकोश प्रदान करता है। प्रवेश पहुंच, सम्मिलन, और हटाना ओ (लॉग एन) ले लो। गारंटी है कि शब्दकोश की गणना कुंजी तुलनाकर्ता द्वारा निर्दिष्ट आदेश का पालन करती है।
पहरा संग्रह
साथ ही, सी 5 भी "पहरा" संग्रह, जो प्रभावी रूप से केवल पढ़ने के लिए आवरण के रूप में कार्य करता है, संशोधित किए जाने से संग्रह को रोकने प्रदान करता है। संग्रह में आइटम अभी भी संशोधित किए जा सकते हैं, लेकिन आइटम को संग्रह में जोड़ा, हटाया या डाला नहीं जा सकता है।
एक लंबा उत्तर, लेकिन सी 5 पुस्तकालयों पर आपके निपटान में विभिन्न संग्रहों पर पूरी तरह से। मैं सी 5 पुस्तकालय महान होने के लिए मिल गया है और अक्सर अपने खुद के कोड में उपयोग, के साथ आम सी # हैडर की जगह:
using C5;
using SCG = System.Collections.Generic;
स्रोत
2008-10-16 17:42:11
सिस्टम भी है। चयन। अधिक उपहारों के साथ विशेषीकृत StringDictionary और NameValueCollection – Hafthor
@ हाफ्थोर: हां, हालांकि उनमें से अधिकतर जेनेरिक के साथ कुछ हद तक अप्रचलित हो गए हैं। –
बहुत अच्छी सूची <संग्रह प्रकार> आप इकट्ठे हुए हैं। मैंने जो कुछ भी कभी भी उपयोग किया है वह वहां है। – stephenbayer