C# में IEnumerable को List में कुशलतापूर्वक बदलना
यह लेख C# में IEnumerable<T>
को List<T>
में बदलने के विभिन्न तरीकों का पता लगाता है, उनकी दक्षता और विभिन्न परिदृश्यों के लिए उपयुक्तता की तुलना करता है। इन डेटा संरचनाओं की बारीकियों को समझना अनुकूलित और बनाए रखने योग्य कोड लिखने के लिए महत्वपूर्ण है।
विषयसूची
IEnumerable<T>
औरList<T>
को समझनाIEnumerable<T>
कोList<T>
में कब बदलेंToList()
विधि का उपयोग करनाList<T>
कंस्ट्रक्टर का उपयोग करना- LINQ क्वेरी सिंटैक्स का उपयोग करना
foreach
लूप का उपयोग करना- कस्टम एक्सटेंशन मेथड बनाना
- निष्कर्ष
IEnumerable<T>
और List<T>
को समझना
IEnumerable<T>
और List<T>
दोनों संग्रहों के साथ काम करते हैं, लेकिन उनकी विशेषताएँ काफी भिन्न हैं:
IEnumerable<T>
: यह इंटरफ़ेस तत्वों के क्रम का प्रतिनिधित्व करता है जिसेforeach
लूप का उपयोग करके पुनरावृति किया जा सकता है। यह केवल-पठन है; आप सीधे तत्वों को जोड़, हटा या संशोधित नहीं कर सकते। यह उन परिदृश्यों के लिए आदर्श है जहाँ आपको यादृच्छिक पहुँच या संशोधन की आवश्यकता के बिना क्रमिक रूप से तत्वों को संसाधित करने की आवश्यकता होती है।List<T>
: गतिशील आकार की सरणी का प्रतिनिधित्व करने वाली एक ठोस कक्षा। यह सूचकांक द्वारा तत्वों को जोड़ने, हटाने, सम्मिलित करने और एक्सेस करने के लिए विधियाँ प्रदान करती है। हेरफेर के लिए लचीलापन प्रदान करता है लेकिन स्मृति में संपूर्ण संग्रह संग्रहीत करने के कारण अधिक स्मृति की खपत करता है।
IEnumerable<T>
को List<T>
में कब बदलें
रूपांतरण आवश्यक है जब:
- यादृच्छिक पहुँच:
List<T>
IEnumerable<T>
के विपरीत, प्रत्यक्ष पहुँच (जैसे,myList[5]
) की अनुमति देता है। - संग्रह संशोधन:
List<T>
तत्वों को जोड़ने, हटाने और सम्मिलित करने का समर्थन करता है। - एकाधिक पुनरावृतियाँ: स्रोत के बार-बार गणना से बचने के लिए,
List<T>
में बदलना एकाधिक पुनरावृत्तियों के लिए अधिक कुशल हो सकता है। - विधि आवश्यकताएँ: कुछ विधियाँ या पुस्तकालय इनपुट के रूप में
List<T>
की अपेक्षा करते हैं।
ToList()
विधि का उपयोग करना
सबसे कुशल और अनुशंसित तरीका ToList()
LINQ एक्सटेंशन विधि का उपयोग करना है:
IEnumerable<int> numbers = Enumerable.Range(1, 10);
List<int> numberList = numbers.ToList();
List<T>
कंस्ट्रक्टर का उपयोग करना
List<T>
कंस्ट्रक्टर IEnumerable<T>
को भी स्वीकार करता है:
IEnumerable<int> numbers = Enumerable.Range(1, 10);
List<int> numberList = new List<int>(numbers);
यह कार्यात्मक रूप से ToList()
के समान है।
LINQ क्वेरी सिंटैक्स का उपयोग करना
हालांकि संभव है, LINQ क्वेरी सिंटैक्स कम संक्षिप्त और कुशल है:
IEnumerable<int> numbers = Enumerable.Range(1, 10);
List<int> numberList = (from number in numbers select number).ToList();
foreach
लूप का उपयोग करना
यह सबसे कम कुशल विधि है, जो केवल विशिष्ट परिदृश्यों के लिए उपयुक्त है जिसमें रूपांतरण के दौरान व्यक्तिगत तत्व प्रसंस्करण की आवश्यकता होती है:
IEnumerable<int> numbers = Enumerable.Range(1, 10);
List<int> numberList = new List<int>();
foreach (int number in numbers)
{
numberList.Add(number);
}
कस्टम एक्सटेंशन मेथड बनाना
विशेष रूपांतरणों के लिए, कस्टम एक्सटेंशन मेथड बनाएँ। उदाहरण के लिए:
public static class MyExtensions
{
public static List<T> ToListAndSort<T>(this IEnumerable<T> source) where T : IComparable<T>
{
List<T> list = source.ToList();
list.Sort();
return list;
}
}
निष्कर्ष
C# में IEnumerable<T>
को List<T>
में बदलने के लिए ToList()
विधि इष्टतम विकल्प है। अन्य विधियाँ कम कुशल या कम पठनीय हैं जब तक कि आपके पास उनका उपयोग करने का कोई विशिष्ट कारण न हो। बड़े डेटासेट से निपटते समय हमेशा मेमोरी निहितार्थों पर विचार करें।