दुर्भाग्य से लुकअप क्लास का निर्माण .NET ढांचे के लिए आंतरिक है। जिस तरह से लुकअप बनाया गया है, लुकअप क्लास पर स्थिर फैक्टरी तरीके के माध्यम से है। ये हैं:
internal static Lookup<TKey, TElement> Create<TSource>(IEnumerable<TSource> source, Func<TSource, TKey> keySelector, Func<TSource, TElement> elementSelector, IEqualityComparer<TKey> comparer);
internal static Lookup<TKey, TElement> CreateForJoin(IEnumerable<TElement> source, Func<TElement, TKey> keySelector, IEqualityComparer<TKey> comparer);
हालांकि, ये विधियां आंतरिक हैं और हमारे द्वारा उपभोग के लिए नहीं हैं। लुकअप क्लास में आइटम हटाने का कोई तरीका नहीं है।
एक तरीका जो आप जोड़ और निकालने के लिए कर सकते हैं वह लगातार नए ILookups बनाना है। उदाहरण के लिए - तत्व को कैसे हटाएं।
//We have a fully populated set:
var set = new List<MyClass>() //Populate this.
var lookup = set.ToLookup(m => m.Key, m => m);
var item = new MyClass { Key = "KEY1", Value = "VALUE2" };
//Now let's "add" to the collection creating a new lookup
lookup = lookup
.SelectMany(l => l)
.Concat(new[] { item })
.ToLookup(l => l.Key, l => l.Value);
स्रोत
2010-10-27 07:56:52
आप आप लुक कार्यान्वयन ही क्यों बनाना न:
सूची में जोड़ने के लिए, हम कुछ इस तरह कर सकता है? इसे एक शब्दकोश पर बेसिंग करना, कोड की कुछ पंक्तियों से अधिक नहीं लेना चाहिए। – leppie
यहां लेप्पी से सहमत हैं। लुकअप क्लास केवल डेटा देखने के लिए है, इसे संशोधित नहीं करता है। इसके अलावा शब्दकोश का उपयोग करने के लिए बहुत कठिन नहीं है, बस एक शब्दकोश के शीर्ष पर एक रैपर लिखने के लिए अच्छा हो सकता है। –
लुकअप में एक शब्दकोश पर वास्तविक लुकअप करने के लिए एक अलग तंत्र भी है। लेकिन कुछ सरल परीक्षणों के साथ, वे दोनों बहुत जल्दी प्रदर्शन करते हैं। –