C# संग्रह ट्यूटोरियल उदाहरणों के साथ

⚡ स्मार्ट सारांश

C# में कलेक्शंस ऑब्जेक्ट्स के समूहों को स्टोर और मैनेज करने का एक लचीला तरीका प्रदान करते हैं। एरेज़ के विपरीत, कलेक्शंस रनटाइम पर बढ़ते और घटते हैं, और System.Collections और System.Collections.Generic नेमस्पेस लिस्ट, डिक्शनरी, स्टैक और क्यू के लिए रेडीमेड टाइप प्रदान करते हैं।

  • 🔃 गतिशील आकार निर्धारण: कलेक्शंस रनटाइम पर एलिमेंट्स जोड़ते और हटाते हैं, इसलिए आप एरे की तरह पहले से आकार तय नहीं कर सकते।
  • 📚 नामस्थान: System.Collections में नॉन-जेनेरिक प्रकार होते हैं, जबकि System.Collections.Generic में टाइप-सेफ जेनेरिक प्रकार होते हैं।
  • 🧱 मुख्य कक्षाएं: ArrayList, Stack, Queue, Hashtable, SortedList और BitArray सामान्य गैर-सामान्य आवश्यकताओं को पूरा करते हैं।
  • सामान्य शक्ति: List, Dictionary, HashSet और Queue कंपाइल-टाइम टाइप सेफ्टी और बेहतर परफॉर्मेंस प्रदान करते हैं।
  • 🔑 सही विकल्प: कुंजी खोजने के लिए डिक्शनरी का उपयोग करें, क्रमबद्ध वस्तुओं के लिए लिस्ट का उपयोग करें, और LIFO या FIFO क्रम के लिए स्टैक या क्यू का उपयोग करें।
  • 🤖 एआई सहायता: GitHub Copilot संग्रह कोड को तैयार करता है, और ML.NET पाइपलाइन सामान्य संग्रह प्रकारों के माध्यम से डेटा पास करती हैं।

C# में संग्रह

हमारे पिछले ट्यूटोरियल में, हमने सीखा है कि हम C# में arrays का उपयोग कैसे कर सकते हैं। आइए इसका एक त्वरित अवलोकन करें, प्रोग्रामिंग में Arrays का उपयोग संबंधित ऑब्जेक्ट्स के एक समूह को समूहीकृत करने के लिए किया जाता है। इसलिए कोई व्यक्ति एक array या पूर्णांकों का एक सेट बना सकता है, जिसे एक चर नाम के माध्यम से एक्सेस किया जा सकता है।

C# में कलेक्शन क्या है?

संग्रह समान हैं Arrays, यह वस्तुओं के समूह के साथ काम करने का एक अधिक लचीला तरीका प्रदान करता है।

ऐरे में, आपने देखा होगा कि आपको ऐरे में तत्वों की संख्या पहले से परिभाषित करनी होगी। ऐसा ऐरे घोषित होने पर ही करना पड़ता है।

लेकिन किसी संग्रह में, आपको संग्रह का आकार पहले से परिभाषित करने की आवश्यकता नहीं है। आप किसी भी समय संग्रह से तत्व जोड़ सकते हैं या तत्व हटा भी सकते हैं। यह अध्याय इस बात पर ध्यान केंद्रित करेगा कि हम C# में उपलब्ध विभिन्न संग्रहों के साथ कैसे काम कर सकते हैं।

सिस्टम.कलेक्शन क्लासेस

.NET फ्रेमवर्क मूल गैर-जेनेरिक संग्रह वर्गों को System.Collections नेमस्पेस के अंतर्गत समूहित करता है। नीचे दी गई तालिका उन मुख्य प्रकारों का सारांश प्रस्तुत करती है जिनका आप सीधे उपयोग कर सकते हैं।

पुस्तक संग्रह विवरण
सारणी सूची ArrayList संग्रह Arrays के समान है C# में डेटा प्रकारसबसे बड़ा अंतर सरणी सूची संग्रह की गतिशील प्रकृति है।
धुआँरा स्टैक एक विशेष प्रकार का संग्रह है जो लास्ट इन फर्स्ट आउट (LIFO) अवधारणा का प्रतिनिधित्व करता है।
कतारों क्यू एक विशेष प्रकार का संग्रह है जो 'पहले आओ पहले पाओ' की अवधारणा को दर्शाता है।
हैश तालिका हैश टेबल एक विशेष संग्रह है जिसका उपयोग कुंजी-मान आइटमों को संग्रहीत करने के लिए किया जाता है।
क्रमबद्ध सूची सॉर्टेडलिस्ट एक संग्रह है जो डिफ़ॉल्ट रूप से कुंजी के आरोही क्रम में कुंजी-मान युग्मों को संग्रहीत करता है।
बिटअरे बिट ऐरे डेटा संरचना की एक ऐरे है जो बिट्स को संग्रहीत करती है।

C# में जेनेरिक कलेक्शंस

ऊपर दी गई गैर-जेनेरिक क्लासें प्रत्येक तत्व को एक सामान्य ऑब्जेक्ट के रूप में संग्रहीत करती हैं, जिसका अर्थ है कि कंपाइलर प्रकार की जाँच नहीं कर सकता और प्रोग्राम को मानों को बॉक्सिंग करने के लिए थोड़ी लागत चुकानी पड़ती है। इस समस्या को हल करने के लिए, C# ने System.Collections.Generic नेमस्पेस जोड़ा, जहाँ प्रत्येक संग्रह एक घोषित प्रकार से जुड़ा होता है।

एक सामान्य संग्रह जैसे कि सूची यह केवल स्ट्रिंग स्वीकार करता है, इसलिए संकलन समय पर ही गलतियाँ पकड़ी जाती हैं और आइटम को वापस पढ़ते समय कास्टिंग की आवश्यकता नहीं होती है। इससे जेनेरिक संग्रह अधिक सुरक्षित, तेज़ और पढ़ने में आसान हो जाते हैं, यही कारण है कि आधुनिक C# कोड में इन्हें डिफ़ॉल्ट विकल्प के रूप में चुना जाता है।

सबसे आम जेनेरिक संग्रह नीचे सूचीबद्ध हैं:

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

C# सूची संग्रह उदाहरण

लिस्ट सबसे व्यापक रूप से उपयोग किया जाने वाला जेनेरिक कलेक्शन है क्योंकि यह एक डायनामिक ऐरे की तरह व्यवहार करता है। नीचे दिए गए उदाहरण में स्ट्रिंग्स की एक लिस्ट बनाई जाती है, उसमें आइटम जोड़े और हटाए जाते हैं, उसका आकार पढ़ा जाता है, और फिर शेष मान प्रिंट किए जाते हैं। सारा कोड Program.cs फ़ाइल में लिखा गया है।

चरण 1) System.Collections.Generic नेमस्पेस को इम्पोर्ट करें और स्ट्रिंग्स की एक लिस्ट घोषित करें।

चरण 2) Add मेथड का उपयोग करके आइटम जोड़ें और Remove मेथड का उपयोग करके आइटम हटाएं।

चरण 3) Count प्रॉपर्टी को पढ़ें, फिर foreach स्टेटमेंट का उपयोग करके सूची में लूप चलाएं।

using System;
using System.Collections.Generic;
namespace DemoApplication
{
 class Program
 {
  static void Main(string[] args)
  {
   List<string> tutorials = new List<string>();
   tutorials.Add("Java");
   tutorials.Add("Python");
   tutorials.Add("Kotlin");
   tutorials.Remove("Python");
   Console.WriteLine(tutorials.Count);
   foreach (string tutorial in tutorials)
   {
    Console.WriteLine(tutorial);
   }
   Console.ReadKey();
  }
 }
}

Code स्पष्टीकरण: -

  1. System.Collections.Generic नेमस्पेस को इम्पोर्ट किया गया है ताकि List टाइप प्रोग्राम के लिए उपलब्ध हो सके।
  2. एक नई सूची ट्यूटोरियल नामक एक फ़ोल्डर बनाया जाता है, और ऐड विधि का उपयोग करके तीन नाम जोड़े जाते हैं।
  3. Remove विधि “ मान को हटा देती हैPythonजिससे सूची में दो आइटम शेष रह जाते हैं।
  4. Count प्रॉपर्टी आइटमों की संख्या लौटाती है, और foreach लूप शेष प्रत्येक मान को क्रम से प्रिंट करता है।

जब प्रोग्राम चलता है, तो यह सबसे पहले गिनती प्रिंट करता है। 2, द्वारा पीछा Java और Kotlin अलग-अलग पंक्तियों में। यह दर्शाता है कि रनटाइम पर एक संग्रह अपना आकार कैसे बदलता है, जो एक निश्चित सरणी नहीं कर सकती।

C# में एरे और कलेक्शन के बीच अंतर

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

मुख्य अंतर नीचे सूचीबद्ध हैं:

  • आकार: एक ऐरे की लंबाई घोषणा के समय ही तय हो जाती है, जबकि एक कलेक्शन किसी भी समय बढ़ या घट सकता है।
  • टाइप हैंडलिंग: एक ऐरे एक ही प्रकार की वस्तु को संग्रहीत करता है, जबकि एक कलेक्शन जेनेरिक्स के साथ टाइप-सेफ हो सकता है या नॉन-जेनेरिक होने पर मिश्रित प्रकार की वस्तुओं को धारण कर सकता है।
  • स्थान: एरे भाषा में अंतर्निहित होते हैं, जबकि कलेक्शन क्लास System.Collections और System.Collections.Generic नेमस्पेस में मौजूद होते हैं।
  • अंतर्निर्मित क्रियाएँ: संग्रह आइटम जोड़ने, हटाने, खोजने और सॉर्ट करने के लिए तैयार तरीके प्रदान करते हैं, जबकि सरणी केवल बुनियादी अनुक्रमित पहुंच प्रदान करती है।
  • सर्वोत्तम उपयोग: जब आइटमों की संख्या ज्ञात और निश्चित हो तो ऐरे चुनें, और जब प्रोग्राम चलने के दौरान संख्या बदलती रहे तो कलेक्शन चुनें।

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

अक्सर पूछे जाने वाले प्रश्न

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

HashSet और Dictionary सबसे तेज़ लुकअप प्रदान करते हैं क्योंकि वे लगभग स्थिर समय में किसी तत्व तक पहुँचने के लिए हैशिंग का उपयोग करते हैं। List या array धीमे होते हैं क्योंकि उन्हें क्रम में प्रत्येक तत्व की जाँच करनी पड़ सकती है।

कॉन्करेंट कलेक्शंस System.Collections.Concurrent नेमस्पेस में मौजूद होते हैं और मल्टीथ्रेडेड कोड के लिए बनाए गए हैं। ConcurrentDictionary और BlockingCollection जैसे प्रकार कई थ्रेड्स को मैन्युअल लॉक के बिना सुरक्षित रूप से आइटम जोड़ने और हटाने की अनुमति देते हैं।

IEnumerable मूल इंटरफ़ेस है जो केवल foreach लूप के साथ आइटम पढ़ने का समर्थन करता है। ICollection इसे विस्तारित करता है और Count, Add और Remove जैसे सदस्य जोड़ता है, इसलिए यह संग्रह को संशोधित करने का भी समर्थन करता है।

List एक जेनेरिक, टाइप-सेफ कलेक्शन है जो एक घोषित टाइप को स्टोर करता है, जिससे कंपाइल-टाइम चेक और बेहतर परफॉर्मेंस मिलती है। वहीं, ArrayList नॉन-जेनेरिक है और प्रत्येक आइटम को एक ऑब्जेक्ट के रूप में स्टोर करता है, जिसके लिए कास्टिंग की आवश्यकता होती है और यह मिश्रित टाइप की अनुमति देता है।

स्टैक में 'लास्ट इन फर्स्ट आउट' का नियम लागू होता है, इसलिए पॉप विधि का उपयोग करके सबसे नया आइटम पहले हटाया जाता है। क्यू में भी 'फर्स्ट इन फर्स्ट आउट' का नियम लागू होता है, इसलिए डीक्यू विधि का उपयोग करके सबसे पुराना आइटम पहले हटाया जाता है।

जी हां। GitHub Copilot सही संग्रह प्रकार का सुझाव दे सकता है, आइटम जोड़ने या फ़िल्टर करने वाले लूप उत्पन्न कर सकता है, और एक संक्षिप्त टिप्पणी से LINQ क्वेरी को पूरा कर सकता है, जिससे सूचियों, शब्दकोशों और अन्य संग्रहों के साथ काम करने में तेजी आती है।

ML.NET, List और IEnumerable जैसे संग्रहों के माध्यम से प्रशिक्षण डेटा प्रदान करता है, जो इसके IDataView पाइपलाइन से मैप होते हैं। नमूनों को एक स्ट्रॉन्गली टाइप्ड जेनेरिक संग्रह में संग्रहीत करने से मशीन लर्निंग वर्कफ़्लो स्पष्ट और टाइप-सेफ बना रहता है।

इस पोस्ट को संक्षेप में इस प्रकार लिखें: