Tuesday, October 26, 2021

C# Collections Part1 Array Vs ArrayList in Hindi

C# प्रोग्रामिंग के अंतर्गत Collections एक महत्वपूर्ण अवधारणा है। System.Collections नेमस्पेस के अधीन कई सारे महत्त्वपूर्ण कलेक्शन क्लासेज हैं जैसे ArrayList, Hashtable, SortedList, Stack, Queue इत्यादि। इन क्लासेज का उपयोग विभिन्न प्रकार के data structures के रूप में किया जाता है। ये विभिन्न प्रकार के क्लास अलग अलग आवश्यकताओं को ध्यान में रखते हुए .NET के अधीन विकसित किए गए हैं। ये विभिन्न प्रकार की आवश्यकताएं क्या है, इसके बारे में हम आगे अध्ययन करेंगे।

कलेक्शन का सामान्य अर्थ विभिन्न प्रकार की वस्तुओं का संग्रह है। कलेक्शन के अंतर्गत ये विभिन्न प्रकार की वस्तुएं समान हो सकती हैं अथवा विषम। इसका सबसे प्रमुख उदाहरण Array है।

Array .NET के System नेमस्पेस के अधीन एक कलेक्शन है जिसके अंतर्गत सारे एलिमेंट्स एक जैसे डाटाटाइप के होते हैं। अतः Array की यह विशेषता है कि यह एक type safe डाटा स्ट्रक्चर है परंतु इसकी एक सीमा यह है कि यह एक पूर्व निश्चित संख्या के एलिमेंट्स को ही स्टोर कर सकता है। इसका अभिप्राय यह है कि एक बार आरम्भ में Array की साइज निर्धारित कर देने के पश्चात उसके साइज को बढ़ाया या घटाया नहीं जा सकता है। 

यद्यपि Array के साथ Resize मेथड का प्रयोग कर उसके साइज को परिवर्तित किया जा सकता है लेकिन ऐसा करने पर वस्तुतः नया Array ऑब्जेक्ट बनता है जो पुराने Array के डाटा को कॉपी नये Array में करता है।

Array के उदाहरण को निम्नलिखित कोड में स्पष्ट किया गया है।
using System;

namespace ArrayClass
{
    class Program
    {
        static void Main(string[] args)
        {
            // array is created using new keyword
            // array size must be given or array must be initialized 
            int[] arrInt = new int[4];
            Console.WriteLine("Array size is {0}", arrInt.Length);
            //auto initialized
            Console.WriteLine("\n-----------------------");
            Console.WriteLine("Auto initialized value at 0 index is {0}", arrInt[0]);
            Console.WriteLine("Auto initialized value at 1 index is {0}", arrInt[1]);
            Console.WriteLine("Auto initialized value at 2 index is {0}", arrInt[2]);
            Console.WriteLine("Auto initialized value at 3 index is {0}", arrInt[3]);
            //re-initialize
            arrInt[0] = 11;
            arrInt[1] = 21;
            arrInt[2] = 13;
            arrInt[3] = 14;
            Console.WriteLine("\n-----------------------");
            Console.WriteLine("Reinitialized value at 0 index is {0}", arrInt[0]);
            Console.WriteLine("Reinitialized value at 1 index is {0}", arrInt[1]);
            Console.WriteLine("Reinitialized value at 2 index is {0}", arrInt[2]);
            Console.WriteLine("Reinitialized value at 3 index is {0}", arrInt[3]);
            //resize array using Array.Resize() method
            Array.Resize(ref arrInt, 6);
            Console.WriteLine("\n-----------------------");
            Console.WriteLine("After resize, value at 0 index is {0}", arrInt[0]);
            Console.WriteLine("After resize, value at 1 index is {0}", arrInt[1]);
            Console.WriteLine("After resize, value at 2 index is {0}", arrInt[2]);
            Console.WriteLine("After resize, value at 3 index is {0}", arrInt[3]);
            Console.WriteLine("After resize, value at 0 index is {0}", arrInt[4]);
            Console.WriteLine("After resize, value at 1 index is {0}", arrInt[5]);
            Console.WriteLine("\n-----------------------");
            //sort array using Array.Sort() method
            Array.Sort(arrInt);
            for (int i = 0; i < arrInt.Length; i++)
            {
                Console.WriteLine("After sorting, value at {0} index is {1}" , i, arrInt[i]);
            }
            Console.WriteLine("\n-----------------------");
            // array size not given but array initialized 
            string[] cities = new string[] { "Delhi", "Agra", "Patna", "Bhopal"};
            foreach (string city in cities)
            {
                Console.WriteLine(city);
            }
            Console.WriteLine("\n-----------------------");
            // array size not given but array initialized without new keyword 
            string[] continents = { "Asia", "Europe", "Africa", "Australia" };
            foreach (string continent in continents)
            {
                Console.WriteLine(continent);
            }
            Console.WriteLine("\n-----------------------");
            //copy array into another array
            string[] continents2 = new string[5];
            Array.Copy(continents, continents2, continents.Length);
            continents2[4] = "America";
            foreach (var cont in continents2)
            {
                Console.WriteLine(cont);
            }
            // convert array datatype using Array.ConvertAll method
            float[] numbers = new float[5];
            numbers[0] = 1.43f;
            numbers[1] = 2.75f;
            numbers[2] = 4.70f;
            numbers[3] = 8.80f;
            numbers[4] = 7.50f;
            double[] dblNumbers = Array.ConvertAll(numbers, new Converter( n=>Convert.ToDouble(n)));
            Console.WriteLine("\n-----------------------");
            Console.WriteLine("Float to Double conversion:\n");
            for (int i = 0; i < dblNumbers.Length; i++)
            {
                Console.WriteLine(numbers[i] +" => "+ dblNumbers[i]);
            }
            Console.ReadKey();
        }
    }
}
इस प्रकार एक तरफ जहां Array टाइप सेफ्टी प्रदान करता है वही दूसरी ओर यह साइज को परिवर्तित करने की फ्लेक्सिबिलिटी नहीं देता है। अगर आपके बिजनेस की रिक्वायरमेंट ऐसी है जिसमें डाटा की साइज को परिवर्तित नहीं करना है तो आप Array का उपयोग कर सकते हैं। उदाहरण के लिए एक सिनेमाघर में सीटों की संख्या। सिनेमा घर के निर्माण के साथ ही दर्शकदीर्घा में सीटों की एक अधिकतम संख्या निर्धारित कर दी जाती है। ऐसे डाटा के लिए Array का उपयोग वांछनीय है। इसके विपरीत किसी वेबसाइट के यूजर मेंबर की संख्या को निश्चित नहीं किया जा सकता है। शुरुआत में मेंबर की संख्या ३०-४० हो सकता है लेकिन समय के साथ साथ उसकी संख्या में अपार वृद्धि हो सकती है। अतः ऐसी स्थिति में Array वांछनीय नहीं है।

ArrayList as Collection or Data Structure

Array की सीमा को ध्यान में रखते हुए कलेक्शंस नेमस्पेस के अंदर ArrayList नामक क्लास बनाया गया है। इस बने बनाए क्लास की खूबियां यह है कि इसके अंतर्गत क्लास में एलिमेंट्स की संख्या को मनमर्जी के अनुसार घटाया बढ़ाया जा सकता है। 

Array जहां टाइप्सेफ है वही ArrayList टाइप्सेफ नहीं है। Array के अंतर्गत जितने भी एलिमेंट्स होते हैं उन सभी के डाटा टाइप एक जैसे होते हैं जबकि ArrayList के अंतर्गत विभिन्न प्रकार के डाटाटाइप के एलिमेंट्स को स्टोर किया जा सकता है।

  using System;
using System.Collections;

namespace ProjectArrayList
{
    class Program
    {
        static void Main(string[] args)
        {
            ArrayList Employee = new ArrayList();
            //ArrayList accepts all types of data because it adds Object type data
            Employee.Add("Amit");
            Employee.Add(30);
            Employee.Add("HR");
            Employee.Add(40000);
            //list ArrayList Employee data
            foreach (var data in Employee)
            {
                Console.WriteLine(data);
            }
            //Object Initializer to add items in one step
            Console.WriteLine();
            ArrayList Product = new ArrayList() { "Mobile", 200000, "Black", "Samsung", "J7-Prime" };
            //accessing ArrayList object using index
            for (int i = 0; i < Product.Count; i++)
            {
                Console.WriteLine(Product[i]);
            }
            //There are several methods of ArrayList to add items, to remove items in several ways
            //Create an ArrayList object called Student
            Console.WriteLine();
            ArrayList Student = new ArrayList() { 1, "Anand", "MCA", "Semester5", true, 20000 };
            //add item at the end of the Student items
            Student.Add("Agra");
            //insert at a specified index postion
            Student.Insert(2, "Gupta");
            foreach (var item in Student)
            {
                Console.WriteLine(item);

            }
            Console.WriteLine();
            //remove an item
            Student.Remove("Semester5");
            //remove an item at index position
            Student.RemoveAt(2);
            foreach (var item in Student)
            {
                Console.WriteLine(item);

            }
            Console.WriteLine("Total items in Student ArrayList object: {0}", Student.Count);
            Console.WriteLine("Total Capacity of Student ArrayList object: {0}", Student.Capacity);
            Console.WriteLine("BCA item exists or not: {0}",Student.Contains("BCA"));
            Console.ReadKey();
        }
    }
}
ऊपर के उदाहरण में हमने ArrayList के कुछ महत्त्वपूर्ण Properties और Methods को देखा। Array की भांति इंडेक्स के आधार पर ArrayList के मेंबर्स को चयनित किया जाता है। यह कई बार समस्या उत्पन्न कर सकता है। मान लीजिए ArrayList के अंतर्गत मेंबर की संख्या बहुत ज्यादा है तो ऐसी स्थिति में किसी मेंबर विशेष को एक्सेस करने के लिए उसके इंडेक्स नंबर को देखना पड़ेगा। कई बार ऐसा हो सकता है कि प्रोग्रामर के द्वारा उसके इंडेक्स नंबर को गलत इंटर कर दिया जाए और ऐसी स्थिति में कोड में त्रुटि उत्पन्न हो जाएगा। यह समस्या Array के साथ भी है क्योंकि Array भी इंडेक्स पर आधारित हैं। इस स्थिति से बचने के लिए इंडेक्स की जगह key का प्रयोग वांछनीय है। Hashtable कलेक्शन के अंतर्गत किसी मेम्बर को एक्सेस करने के लिए key का उपयोग किया जाता है। Hashtable के इस तथ्य को हम अब समझते हैं। Hashtable भी ArrayList की भांति System.Collections नेमस्पेस के अधीन है।
using System;
using System.Collections;

namespace ProjectHashtable
{
    class Program
    {
        static void Main(string[] args)
        {
            Hashtable Laptop = new Hashtable();
            Laptop.Add("Acer", "20000,Black");
            Laptop.Add("HP", "30000,White");
            Laptop.Add("Asus", "45000,Silver");
            Laptop.Add("Apple", "60000,Gold");
            
            foreach (var value in Laptop.Values)
            {
                Console.WriteLine(value);
            }

            foreach (var key in Laptop.Keys)
            {
                Console.WriteLine(key);
            }
            Console.WriteLine(Laptop.ContainsKey("acer"));
            Console.WriteLine(Laptop.ContainsKey("Acer"));
            Console.WriteLine(Laptop.ContainsValue("60000"));
            Console.WriteLine(Laptop.ContainsValue("60000,Gold"));
            Console.WriteLine("Count Items in Laptop: {0}",Laptop.Count);
            //does not throw exception if key is not found
            Laptop.Remove("HP");
            Laptop.Clear();
            Console.WriteLine("Count Items in Laptop: {0}",Laptop.Count);
            Console.ReadLine();
        }
    }
}

© अजीत कुमार, सर्वाधिकार सुरक्षित।

इस आलेख को उद्धृत करते हुए इस लेख के लिंक का भी विवरण दें। इस आलेख को कॉपीराइट सूचना के साथ यथावत साझा करने की अनुमति है। कृपया इसे ऐसे स्थान पर साझा न करें जहाँ इसे देखने के लिए शुल्क देना पडे।

No comments:

Post a Comment

Hot Topics