जब अपवाद कोई विकल्प नहीं है, तो लुकअप के लिए जाएं
यदि आप एक संरचना के रूप में कुशल होने की कोशिश कर रहे हैं, Dictionary
लेकिन आप यह नहीं जानते कि इनपुट में कोई डुप्लिकेट कुंजी नहीं है, Lookup
तो सुरक्षित है।
जैसा कि एक अन्य उत्तर में उल्लेख किया गया है, यह अशक्त कुंजियों का भी समर्थन करता है, और हमेशा एक वैध परिणाम देता है जब मनमाने ढंग से डेटा के साथ क्वेरी की जाती है, इसलिए यह अज्ञात इनपुट के लिए अधिक लचीला प्रतीत होता है (अपवादों को उठाने के लिए शब्दकोश की तुलना में कम प्रवण)।
और यह विशेष रूप से सच है यदि आप इसे System.Linq.Enumerable.ToDictionary
फ़ंक्शन से तुलना करते हैं:
// won't throw
new[] { 1, 1 }.ToLookup(x => x);
// System.ArgumentException: An item with the same key has already been added.
new[] { 1, 1 }.ToDictionary(x => x);
विकल्प यह होगा कि आप foreach
लूप के अंदर अपना डुप्लिकेट कुंजी प्रबंधन कोड लिखें ।
प्रदर्शन विचार, शब्दकोश: एक स्पष्ट विजेता
यदि आपको सूची की आवश्यकता नहीं है और आप बड़ी संख्या में आइटम का प्रबंधन करने जा रहे हैं, Dictionary
(या यहां तक कि आपकी खुद की कस्टम अनुरूप संरचना) अधिक उपयोगी होगी:
Stopwatch stopwatch = new Stopwatch();
var list = new List<string>();
for (int i = 0; i < 5000000; ++i)
{
list.Add(i.ToString());
}
stopwatch.Start();
var lookup = list.ToLookup(x => x);
stopwatch.Stop();
Console.WriteLine("Creation: " + stopwatch.Elapsed);
// ... Same but for ToDictionary
var lookup = list.ToDictionary(x => x);
// ...
जैसा कि Lookup
प्रत्येक कुंजी के लिए वस्तुओं की एक सूची को बनाए रखना है, यह डिक्शनरी की तुलना में धीमा है (बड़ी संख्या में मदों के लिए लगभग 3x धीमा)
लुकअप गति: निर्माण: 00: 00: 01.5760444
शब्दकोश गति: निर्माण: 00: 00: 00.4418833