.NET डेटा संरचनाएँ: ArrayList, List, HashTable, Dictionary, SortedList, SortedDictionary - स्पीड, मेमोरी और प्रत्येक का उपयोग कब करें?


213

.NET में बहुत सारी जटिल डेटा संरचनाएँ हैं। दुर्भाग्य से, उनमें से कुछ काफी समान हैं, और मुझे हमेशा यकीन नहीं है कि कब एक का उपयोग करना है और कब दूसरे का उपयोग करना है। मेरी सी # और विज़ुअल बेसिक किताबों में से अधिकांश उनके बारे में एक निश्चित सीमा तक बात करती हैं, लेकिन वे वास्तव में कभी भी वास्तविक विस्तार में नहीं जाते हैं।

Array, ArrayList, List, Hashtable, Dictionary, SortedList और SortedDictionary के बीच क्या अंतर है?

कौन-से एन्युमरेबल हैं (IList - कर सकते हैं 'foreach' लूप्स)? कौन से लोग कुंजी / मान जोड़े (आईडी) का उपयोग करते हैं?

स्मृति पदचिह्न के बारे में क्या? सम्मिलन की गति? पुनः प्राप्ति की गति?

क्या कोई अन्य डेटा संरचनाएं ध्यान देने योग्य हैं?

मैं अभी भी मेमोरी उपयोग और गति (बिग-ओ नोटेशन) पर अधिक विवरण खोज रहा हूं।


12
आपको इस प्रश्न को तोड़ देना चाहिए। आप बीस अलग-अलग चीजें पूछ रहे हैं, जिनमें से आधी साधारण Google खोज का जवाब दे सकती है। कृपया और स्पष्ट बताएं; जब आपका प्रश्न इतना बिखरा हुआ हो तो उसकी सहायता करना कठिन है।

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

9
क्या इस सवाल को विकी में बदल दिया जा सकता है?
बोझाओ जो

1
यह MSDN लेख इन सवालों के बहुत से कवर करता है, जिसमें पेड़, ग्राफ और सेट शामिल हैं, डेटा संरचनाओं की एक व्यापक परीक्षा
रयान फिशर

1
रयान, उस लिंक के लेख 14 साल पुराने हैं, (पोस्ट के समय 12)। साइड नोट मैं उन्हें पिछले सप्ताह के लिए खुद पढ़ रहा हूं। लेकिन उनमें नई तकनीक शामिल नहीं है और उन्हें अपडेट करने की सख्त जरूरत है। और अधिक प्रदर्शन मैट्रिक्स और उदाहरण।
htm11h

जवाबों:


156

मेरे सर के ऊपर से चला गया:

  • Array* - एक पुराने स्कूल स्मृति सरणी का प्रतिनिधित्व करता है - एक सामान्य type[]सरणी के लिए एक उपनाम की तरह । गणना कर सकते हैं। अपने आप नहीं बढ़ सकता। मैं बहुत तेजी से सम्मिलित करने और पीछे हटने की गति मानूंगा।

  • ArrayList- स्वचालित रूप से बढ़ती सरणी। अधिक उपरि जोड़ता है। Enum कर सकते हैं।, शायद एक सामान्य सरणी की तुलना में धीमी लेकिन अभी भी बहुत तेज है। इनका उपयोग .NET में बहुत किया जाता है

  • List- मेरे एक favs - का उपयोग जेनेरिक के साथ किया जा सकता है, इसलिए आपके पास एक जोरदार टाइप की गई सरणी हो सकती है, जैसे List<string>। इसके अलावा, बहुत पसंद हैArrayList

  • Hashtable- सादा पुराना हैशटेबल। O (1) से O (n) सबसे खराब स्थिति। मूल्य और कुंजियों के गुणों की गणना कर सकते हैं, और कुंजी / वैल जोड़े कर सकते हैं

  • Dictionary - ऊपर से केवल जेनेरिक के माध्यम से दृढ़ता से टाइप किया गया है, जैसे कि Dictionary<string, string>

  • SortedList- एक क्रमबद्ध जेनेरिक सूची। सम्मिलन पर धीमा क्योंकि यह पता लगाना है कि चीजों को कहां रखा जाए। गणना कर सकते हैं, संभवतः पुनर्प्राप्ति पर समान है क्योंकि इसका सहारा नहीं लेना है, लेकिन हटाए जाने की प्रक्रिया एक पुरानी पुरानी सूची की तुलना में धीमी होगी।

मैं का उपयोग करते हैं Listऔर Dictionaryहर समय - एक बार आप का उपयोग कर उन्हें दृढ़ता से जेनरिक के साथ टाइप किया शुरू करते हैं, इसकी वास्तव में कड़ी मेहनत मानक गैर सामान्य लोगों को वापस जाने के लिए।

बहुत सी अन्य डेटा संरचनाएँ भी हैं - वहाँ है KeyValuePairजिसका उपयोग आप कुछ दिलचस्प चीजें करने के लिए कर सकते हैं, वहाँ एक है SortedDictionaryजो उपयोगी हो सकता है।


3
हैश टेबल ओ (1) है, सबसे खराब स्थिति (टकरावों के साथ) हे (एन) हो सकती है
जस्टिन बोज़ोनियर

7
कई अन्य डेटा संरचनाएं हैं जिन्हें आपको यहां जोड़ना होगा। जैसे लिंक्डलिस्ट, स्किप लिस्ट, स्टैक, क्यू, हीप, ट्रीज़, ग्राफ। ये बहुत महत्वपूर्ण डेटा संरचनाएँ हैं।
डार्थवेडर

2
समवर्ती
छाया

2
साथ ही ब्लॉकिंगकॉलेक्शन <टी> एक थ्रेड सेफ प्रोड्यूसर / कंज्यूमर
इम्प्लीमेंटेशन

7
ArrayListआभासी तरीकों का उपयोग करता है, लेकिन List<T>नहीं करता है। ArrayListबड़े पैमाने पर List<T>मानक संग्रह के लिए और Collection<T>कस्टम संग्रह के लिए आधार वर्ग के रूप में प्रतिस्थापित किया गया है । Hashtableकाफी हद तक बदल दिया गया है Dictionary<TKey, TValue>। मैं बचने की सलाह दूंगा ArrayListऔर Hashtableनए कोड के लिए।
सैम हरवेल

29

यदि संभव हो तो, जेनरिक का उपयोग करें। यह भी शामिल है:

  • ArrayList के बजाय सूची
  • हैशटेबल के बजाय शब्दकोश

24

सबसे पहले, .NET में सभी संग्रह IEnumerable लागू करते हैं।

दूसरे, बहुत सारे संग्रह डुप्लिकेट हैं क्योंकि फ्रेमवर्क के संस्करण 2.0 में जेनरिक जोड़े गए थे।

इसलिए, हालांकि जेनेरिक कलेक्शन में सबसे अधिक भाग के लिए संभावनाएं हैं:

  • सूची ArrayList का एक सामान्य कार्यान्वयन है।
  • शब्दकोश हैशटेबल का एक सामान्य कार्यान्वयन है

Arrays एक निश्चित आकार का संग्रह है जिसे आप किसी दिए गए सूचकांक में संग्रहीत मान को बदल सकते हैं।

SortedDictionary एक IDEDIA है कि चाबियाँ के आधार पर हल किया है। SortedList एक IDEDIA है जो एक आवश्यक IComparer के आधार पर सॉर्ट किया जाता है।

तो, IDEDIA कार्यान्वयन (KeyValuePairs का समर्थन करने वाले) इस प्रकार हैं: * हैशटेबल * शब्दकोश * SortedList * SortedDictionary

.NET 3.5 में जोड़ा गया एक और संग्रह हैशसेट है। यह एक संग्रह है जो सेट संचालन का समर्थन करता है।

इसके अलावा, लिंक्डलिस्ट एक मानक लिंक्ड-सूची कार्यान्वयन है (सूची तेजी से पुनः प्राप्ति के लिए एक सरणी-सूची है)।


20

यहाँ आप के लिए कुछ सामान्य सुझाव दिए गए हैं:

  • आप उन foreachप्रकारों पर उपयोग कर सकते हैं जो लागू होते हैं IEnumerableIListअनिवार्य रूप से एक है IEnumberableके साथ Countऔर Itemगुण (एक शून्य आधारित सूचकांक का उपयोग कर आइटम एक्सेस करने वाले)। IDictionaryदूसरी ओर का मतलब है कि आप किसी भी हैशनेट इंडेक्स द्वारा आइटम एक्सेस कर सकते हैं।

  • Array, ArrayListऔर Listसभी लागू होते हैं IListDictionary, SortedDictionaryऔर Hashtableलागू करें IDictionary

  • यदि आप .NET 2.0 या उच्चतर का उपयोग कर रहे हैं, तो यह अनुशंसा की जाती है कि आप उल्लेखित प्रकारों के सामान्य समकक्षों का उपयोग करें।

  • इन प्रकारों पर विभिन्न कार्यों के समय और स्थान की जटिलता के लिए, आपको उनके प्रलेखन से परामर्श करना चाहिए।

  • .NET डेटा संरचनाएँ System.Collectionsनाम स्थान में हैं। पावर लाइब्रेरी जैसे प्रकार के पुस्तकालय हैं जो अतिरिक्त डेटा संरचना प्रदान करते हैं।

  • डेटा संरचनाओं की गहन समझ प्राप्त करने के लिए, CLRS जैसे संसाधनों से परामर्श करें ।


1
से MSDN नहीं IList -, यह IDictionnary लागू sortedList की तरह लगता है
हैम Bendanan

फिक्स्ड। टिप्पणी के लिए धन्यवाद। SortedList की तरह लगता है कुंजी / मूल्यों की एक सूची है, तो यह मूल रूप से एक शब्दकोश डेटा का प्रतिनिधित्व करता है। याद नहीं है कैसे इस वर्ग के लिए काम किया जब मैं पहली बार इस सवाल का जवाब ... लिखा था
blackwing

9

.NET डेटा संरचनाएँ:

ArrayList और List वास्तव में अलग क्यों हैं, इसके बारे में अधिक बातचीत

Arrays

जैसा कि एक उपयोगकर्ता कहता है, Arrays "पुराना स्कूल" संग्रह है (हां, सरणियों को एक संग्रह माना जाता है, हालांकि इसका हिस्सा नहीं है System.Collections)। लेकिन, अन्य संग्रह की तुलना में सरणियों के बारे में "पुराना स्कूल" क्या है, अर्थात जिन्हें आपने अपने शीर्षक में सूचीबद्ध किया है (यहाँ, ArrayList और List (T का))? आइए मूल अक्षर से शुरू करते हैं।

शुरू करने के लिए, Microsoft .NET में एरर्स हैं, "तंत्र जो आपको कई [तार्किक रूप से संबंधित] वस्तुओं को एक एकल संग्रह के रूप में व्यवहार करने की अनुमति देता है," (लिंक किए गए लेख देखें)। इसका क्या मतलब है? Arrays व्यक्तिगत सदस्यों (तत्वों) को क्रमिक रूप से संग्रहीत करता है, एक के बाद एक स्मृति में एक शुरुआती पते के साथ। सरणी का उपयोग करके, हम आसानी से उस पते पर शुरू होने वाले क्रमिक रूप से संग्रहीत तत्वों तक पहुंच सकते हैं।

उस से परे और 101 सामान्य अवधारणाओं के प्रोग्रामिंग के विपरीत, एर्रेज़ वास्तव में काफी जटिल हो सकता है:

Arrays एकल आयाम, बहुआयामी, या jadded हो सकता है (दांतेदार सरणियों के बारे में पढ़ने लायक हैं)। Arrays स्वयं गतिशील नहीं होती है: एक बार आरंभीकृत होने के बाद, n आकार की एक सरणी के पास n संख्या को रखने के लिए पर्याप्त स्थान होता है । सरणी में तत्वों की संख्या बढ़ या सिकुड़ नहीं सकती है। Dim _array As Int32() = New Int32(100)100 इंट 32 आदिम प्रकार की वस्तुओं को रखने के लिए सरणी के लिए मेमोरी ब्लॉक पर पर्याप्त स्थान रखता है (इस मामले में, सरणी को 0s शामिल करने के लिए प्रारंभ किया जाता है)। इस ब्लॉक का पता वापस कर दिया गया है _array

लेख के अनुसार, कॉमन लैंग्वेज स्पेसिफिकेशन (CLS) के लिए आवश्यक है कि सभी सरणियाँ शून्य-आधारित हों। .NET में एरर नॉन-जीरो-आधारित एरेज़ को सपोर्ट करता है; हालाँकि, यह कम आम है। शून्य-आधारित सरणियों के "सामान्य-नेस" के परिणामस्वरूप, Microsoft ने अपने प्रदर्शन का अनुकूलन करने में बहुत समय बिताया है ; इसलिए, एकल आयाम, शून्य-आधारित (SZ) सरणियाँ "विशेष" हैं - और वास्तव में एक सरणी का सबसे अच्छा कार्यान्वयन (जैसा कि बहुआयामी के विपरीत, आदि) - क्योंकि SZ में उन्हें हेरफेर करने के लिए विशिष्ट मध्यस्थ भाषा निर्देश हैं।

एरे को हमेशा संदर्भ (एक स्मृति पते के रूप में) से पारित किया जाता है - जानने के लिए एरे पहेली का एक महत्वपूर्ण टुकड़ा। जबकि वे बाउंड चेकिंग करते हैं (एरर फेकेंगे), बार्ड चेकिंग को एरेज़ पर भी डिसेबल किया जा सकता है।

फिर से, सरणियों के लिए सबसे बड़ी बाधा यह है कि वे पुन: प्रयोज्य नहीं हैं। उनके पास "निश्चित" क्षमता है। प्रस्तुत है हमारे इतिहास के लिए ArrayList और List (T का):

ArrayList - गैर-सामान्य सूची

ArrayList (साथ साथ List(Of T)- हालांकि वहाँ कुछ महत्वपूर्ण मतभेद हैं, यहाँ, बाद में समझाया गया है) - शायद संग्रह के बगल में इसके अलावा (व्यापक अर्थों में) के रूप में करने का सबसे अच्छा सोचा है। ArrayList को IList ('ICollection' का वंशज) इंटरफ़ेस से विरासत में मिला है। ArrayLists, खुद, भारी हैं - सूची से अधिक उपरि की आवश्यकता है ।

IListArrayLists को निश्चित आकार की सूचियों (जैसे Arrays) के रूप में व्यवहार करने के लिए कार्यान्वयन को सक्षम करता है; हालांकि, ArrayLists द्वारा जोड़े गए अतिरिक्त फ़ंक्शनैलिटी से परे, ArrayLists का उपयोग करने के लिए कोई वास्तविक लाभ नहीं हैं जो कि इस मामले में ArrayLists (Arrays के ऊपर) के रूप में निश्चित आकार के हैं, जो कि धीमी गति से हैं।

मेरे पढ़ने से, ArrayLists दांतेदार नहीं हो सकते: "तत्वों के रूप में बहुआयामी सरणियों का उपयोग करना ... समर्थित नहीं है"। फिर से, ArrayLists के ताबूत में एक और कील। ArrayLists भी "टाइप" नहीं हैं - जिसका अर्थ है, सब कुछ के नीचे, एक ArrayList केवल वस्तुओं का एक गतिशील सरणी है Object[]:। ArrayLists को लागू करते समय, उनके ओवरहेड को फिर से जोड़ने पर बहुत सारे बॉक्सिंग (निहित) और अनबॉक्सिंग (स्पष्ट) की आवश्यकता होती है।

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

T की सूची): क्या ArrayList बन गया (और होने की उम्मीद है)

स्मृति उपयोग में अंतर काफी महत्वपूर्ण है, जहां एक सूची (Int32) ने एक ArrayList की तुलना में 56% कम मेमोरी का उपभोग किया, जिसमें एक ही आदिम प्रकार (ऊपर के सज्जन के जुड़े प्रदर्शन में 8 एमबी बनाम 19 एमबी: फिर से, यहां लिंक किया गया है ) यह 64-बिट मशीन द्वारा संयोजित परिणाम है। यह अंतर वास्तव में दो चीजों को प्रदर्शित करता है: पहला (1), एक बॉक्सिंग Int32- टाइप "ऑब्जेक्ट" (ArrayList) एक शुद्ध Int32 आदिम प्रकार (सूची) की तुलना में बहुत बड़ा है; दूसरा (2), अंतर 64-बिट मशीन के आंतरिक कामकाज के परिणामस्वरूप घातीय है।

तो, क्या अंतर है और एक सूची (टी) क्या है? MSDN एक के List(Of T)रूप में परिभाषित करता है , "... वस्तुओं की एक दृढ़ता से टाइप की गई सूची जिसे सूचकांक द्वारा एक्सेस किया जा सकता है।" यहां महत्व "दृढ़ता से टाइप किया हुआ" बिट है: एक सूची (टी का) 'प्रकारों को पहचानता है और वस्तुओं को उनके प्रकार के रूप में संग्रहीत करता है। तो, एक और एक प्रकार के Int32रूप में संग्रहीत किया जाता है । यह बॉक्सिंग और अनबॉक्सिंग के कारण उत्पन्न समस्याओं को समाप्त करता है।Int32Object

MSDN इस अंतर को केवल प्राइमरी प्रकारों को संग्रहीत करने पर खेल में आता है और संदर्भ प्रकारों को निर्दिष्ट करता है। वास्तव में, अंतर वास्तव में बड़े पैमाने पर होता है: 500 से अधिक तत्व। अधिक दिलचस्प बात यह है कि MSDN प्रलेखन में लिखा है, "ArrayList वर्ग का उपयोग करने के बजाय सूची (T) वर्ग के विशिष्ट-विशिष्ट कार्यान्वयन का उपयोग करना आपके लिए है ...."

अनिवार्य रूप से, सूची (T का) ArrayList है, लेकिन बेहतर है। यह ArrayList का "सामान्य समकक्ष" है। ArrayList की तरह, इसे तब तक छाँटने की गारंटी नहीं है जब तक कि छांट दिया न जाए (आंकड़ा)। T की सूची) में कुछ अतिरिक्त कार्यक्षमता भी है।


5

मैं इस प्रश्न के प्रति सहानुभूति रखता हूं - मैंने भी पाया (खोजा?) पसंद करने वाला है, इसलिए मैंने वैज्ञानिक रूप से यह देखने के लिए सेट किया कि कौन सी डेटा संरचना सबसे तेज है (मैंने वीबी का उपयोग करके परीक्षण किया था, लेकिन मुझे लगता है कि सी # एक ही होगी, क्योंकि दोनों भाषाओं के बाद से सीएलआर स्तर पर भी यही काम करें)। आप यहां मेरे द्वारा किए गए कुछ बेंचमार्किंग परिणाम देख सकते हैं (कुछ परिस्थितियों की भी चर्चा है कि किन परिस्थितियों में डेटा प्रकार का उपयोग करना सबसे अच्छा है)।


3

वे अंतर्मुखी में बहुत अच्छी तरह से वर्तनी कर रहे हैं। बस System.Collections टाइप करें या System.Collections.Generics (पसंदीदा) और आपको जो उपलब्ध है उसकी एक सूची और संक्षिप्त विवरण मिलेगा।


3

हैशटेबल्स / डिक्शनरी ओ (1) प्रदर्शन हैं, जिसका अर्थ है कि प्रदर्शन आकार का कार्य नहीं है। यह जानना महत्वपूर्ण है।

संपादित करें: व्यवहार में, हैशटेबल / शब्दकोश <> लुकअप के लिए औसत समय जटिलता O (1) है।


5
"प्रदर्शन" जैसी कोई चीज नहीं है। जटिलता ऑपरेशन पर निर्भर करती है। उदाहरण के लिए, यदि आप शब्दकोश <> में n तत्व सम्मिलित करते हैं, तो यह रीशेज़िंग के कारण O (1) नहीं होगा।
इल्या रायजेनकोव

2
FYI करें, यहां तक ​​कि रिहाशिंग के साथ, डिक्शनरी अभी भी O (1) है। शब्दकोश के विस्तार से ठीक पहले परिदृश्य पर विचार करें। आधे तत्व - जिन्हें पिछले विस्तार के बाद जोड़ा गया था - एक बार हैशड हो जाएगा। शेष के आधे हिस्से को दो बार हैशेड किया गया होगा। शेष का आधा, तीन गुना आदि, प्रत्येक तत्व पर किए गए हैशिंग ऑपरेशन की औसत संख्या 1 + 1/2 + 1/4 + 1/8 ... = 2 होगी। विस्तार के तुरंत बाद की स्थिति अनिवार्य रूप से समान है, लेकिन हर तत्व के पास एक अतिरिक्त समय हो गया है (इसलिए औसत हैश की संख्या तीन है)। अन्य सभी परिदृश्य उनके बीच हैं।
सुपरकैट

3

सामान्य संग्रह अपने गैर-सामान्य समकक्षों की तुलना में बेहतर प्रदर्शन करेंगे, खासकर जब कई मदों के माध्यम से पुनरावृति। ऐसा इसलिए है क्योंकि बॉक्सिंग और अनबॉक्सिंग अब नहीं होता है।


2

उच्च आवृत्ति व्यवस्थित ट्रेडिंग इंजीनियरिंग के लिए हैशटेबल बनाम डिक्शनरी के बारे में एक महत्वपूर्ण नोट: थ्रेड सेफ्टी इश्यू

हैशटेबल कई धागों द्वारा उपयोग के लिए सुरक्षित है। शब्दकोश सार्वजनिक स्थिर सदस्य थ्रेड सुरक्षित हैं, लेकिन किसी भी उदाहरण के सदस्यों को ऐसा होने की गारंटी नहीं है।

इसलिए हैशटेब इस संबंध में 'मानक' विकल्प बना हुआ है।


यह आंशिक रूप से सच है। Hashtableकेवल एक लेखक और कई पाठकों समवर्ती के साथ उपयोग करने के लिए सुरक्षित है। दूसरी ओर, Dictionaryकई पाठकों के साथ उपयोग करना सुरक्षित है जब तक कि इसे समवर्ती रूप से संशोधित नहीं किया जाता है।
ब्रायन मेनार्ड

निश्चित रूप से। ट्रेडिंग स्पेस में, हालांकि, हम लाइव मार्केट डेटा से पढ़ रहे हैं और एनालिटिक्स चला रहे हैं जिसमें एपेंडेड एंट्रीज शामिल हैं। यह इस बात पर भी निर्भर करता है कि कितने व्यापारी सिस्टम का उपयोग कर रहे हैं - अगर यह सिर्फ आप है, तो यह स्पष्ट रूप से मायने नहीं रखता है।
रोब

1
.NET 4.0 एक समवर्ती छायांकन <TKey, TValue>
Rob

1

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


1

सबसे लोकप्रिय सी # डेटा संरचनाएं और संग्रह

  • सरणी
  • सारणी सूची
  • सूची
  • लिंक्ड सूची
  • शब्दकोश
  • HashSet
  • ढेर
  • कतार
  • SortedList

C # .NET में विभिन्न डेटा संरचनाएं हैं, उदाहरण के लिए, सबसे आम लोगों में से एक एक ऐरे है। हालाँकि C # कई और बुनियादी डेटा संरचनाओं के साथ आता है। उपयोग करने के लिए सही डेटा संरचना का चयन एक अच्छी तरह से संरचित और कुशल कार्यक्रम लिखने का हिस्सा है।

इस लेख में मैं बिल्ट-इन C # डेटा स्ट्रक्चर्स पर जाऊंगा, जिनमें C # .NET 3.5 में नए शामिल हैं। ध्यान दें कि इनमें से कई डेटा संरचनाएं अन्य प्रोग्रामिंग भाषाओं के लिए लागू होती हैं।

सरणी

शायद सबसे सरल और सबसे आम डेटा संरचना सरणी है। एसी # सरणी मूल रूप से वस्तुओं की एक सूची है। इसके परिभाषित लक्षण हैं कि सभी वस्तुएं एक ही प्रकार की हैं (ज्यादातर मामलों में) और उनमें से एक विशिष्ट संख्या है। एक सरणी की प्रकृति सूची के भीतर उनकी स्थिति के आधार पर तत्वों तक बहुत तेज़ पहुंच की अनुमति देती है (अन्यथा सूचकांक के रूप में जाना जाता है)। एसी # सरणी को इस तरह परिभाषित किया गया है:

[object type][] myArray = new [object type][number of elements]

कुछ उदाहरण:

 int[] myIntArray = new int[5];
 int[] myIntArray2 = { 0, 1, 2, 3, 4 };

जैसा कि आप ऊपर के उदाहरण से देख सकते हैं, एक सरणी को बिना किसी तत्व के या मौजूदा मूल्यों के एक सेट से जोड़ा जा सकता है। जब तक वे फिट होते हैं तब तक एक सरणी में मान सम्मिलित करना सरल है। सरणी के आकार से अधिक तत्व होने पर ऑपरेशन महंगा हो जाता है, जिस बिंदु पर सरणी को विस्तारित करने की आवश्यकता होती है। इसमें अधिक समय लगता है क्योंकि सभी मौजूदा तत्वों को नए, बड़े सरणी में कॉपी किया जाना चाहिए।

सारणी सूची

C # डेटा संरचना, ArrayList, एक गतिशील सरणी है। इसका मतलब यह है कि एक ArrayList किसी भी प्रकार की वस्तुओं और किसी भी प्रकार का हो सकता है। यह डेटा संरचना एक सरणी में नए तत्वों को जोड़ने की प्रक्रियाओं को आसान बनाने के लिए डिज़ाइन की गई थी। हुड के नीचे, एक एरेलेस्ट एक सरणी है जिसका आकार अंतरिक्ष से बाहर चलने पर हर बार दोगुना हो जाता है। आंतरिक सरणी के आकार को दोगुना करना एक बहुत प्रभावी रणनीति है जो लंबे समय में तत्व-प्रतिलिपि की मात्रा को कम करता है। हम यहाँ उस के प्रमाण में नहीं मिलेंगे। डेटा संरचना का उपयोग करना बहुत सरल है:

    ArrayList myArrayList = new ArrayList();
    myArrayList.Add(56);
    myArrayList.Add("String");
    myArrayList.Add(new Form());

ArrayList डेटा संरचना में नकारात्मक पहलू यह है कि पीछे हटने वाले मूल्यों को उनके मूल प्रकार में वापस लाना चाहिए:

int arrayListValue = (int)myArrayList[0]

स्रोत और अधिक जानकारी आप यहां पा सकते हैं :


1

मुझे संग्रह और डेटा संरचना पृष्ठ पर Microsoft डॉक्स का "संग्रह चुनें" खंड वास्तव में उपयोगी लगा

C # संग्रह और डेटा संरचनाएं: एक संग्रह चुनें

यहां छवि विवरण दर्ज करें

और कुछ अन्य विशेषताओं की तुलना करने के लिए निम्न मैट्रिक्स भी

यहां छवि विवरण दर्ज करें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.